|
|
@@ -23,8 +23,8 @@
|
|
|
|
|
|
<select id="selectCourseDayStatList" resultType="com.fs.course.vo.PublicCourseWatchStatCourseVO">
|
|
|
SELECT
|
|
|
- x.stat_date AS statDate,
|
|
|
- x.course_id AS courseId,
|
|
|
+ m.stat_date AS statDate,
|
|
|
+ m.course_id AS courseId,
|
|
|
COALESCE(uc.title, uc.course_name) AS courseName,
|
|
|
pc.cate_name AS rootCateName,
|
|
|
sc.cate_name AS subCateName,
|
|
|
@@ -42,20 +42,23 @@
|
|
|
WHEN IFNULL(m.exposure_pv, 0) > 0 THEN ROUND(100.0 * IFNULL(m.click_pv, 0) / m.exposure_pv, 2)
|
|
|
ELSE 0
|
|
|
END AS clickRate,
|
|
|
- x.watch_uv AS watchUv,
|
|
|
- x.finish_uv AS finishUv
|
|
|
+ IFNULL(w.watch_uv, 0) AS watchUv,
|
|
|
+ IFNULL(w.finish_uv, 0) AS finishUv
|
|
|
FROM (
|
|
|
SELECT
|
|
|
- DATE(wl.create_time) AS stat_date,
|
|
|
- wl.course_id AS course_id,
|
|
|
- COUNT(DISTINCT wl.user_id) AS watch_uv,
|
|
|
- COUNT(DISTINCT CASE WHEN wl.log_type = 2 THEN wl.user_id END) AS finish_uv
|
|
|
- FROM fs_course_watch_log wl
|
|
|
- INNER JOIN fs_user_course uc ON uc.course_id = wl.course_id
|
|
|
+ DATE(e.create_time) AS stat_date,
|
|
|
+ e.course_id AS course_id,
|
|
|
+ SUM(CASE WHEN e.event_type = 0 THEN 1 ELSE 0 END) AS exposure_pv,
|
|
|
+ COUNT(DISTINCT CASE WHEN e.event_type = 0 THEN e.user_id END) AS exposure_uv,
|
|
|
+ SUM(CASE WHEN e.event_type = 1 THEN 1 ELSE 0 END) AS click_pv,
|
|
|
+ COUNT(DISTINCT CASE WHEN e.event_type = 1 THEN e.user_id END) AS click_uv,
|
|
|
+ MAX(CASE WHEN e.event_type = 0 AND e.exposure_position = 0 THEN 1 ELSE 0 END) AS has_home,
|
|
|
+ MAX(CASE WHEN e.event_type = 0 AND e.exposure_position = 1 THEN 1 ELSE 0 END) AS has_center
|
|
|
+ FROM fs_course_marketing_event e
|
|
|
+ LEFT JOIN fs_user_course uc ON uc.course_id = e.course_id
|
|
|
<include refid="publicCourseWhereCourse"/>
|
|
|
- WHERE wl.send_type = 1
|
|
|
- AND wl.create_time >= #{q.beginDate}
|
|
|
- AND wl.create_time < DATE_ADD(#{q.endDate}, INTERVAL 1 DAY)
|
|
|
+ WHERE e.create_time >= #{q.beginDate}
|
|
|
+ AND e.create_time < DATE_ADD(#{q.endDate}, INTERVAL 1 DAY)
|
|
|
<if test="q.keywords != null and q.keywords != ''">
|
|
|
AND (
|
|
|
uc.title LIKE CONCAT('%', #{q.keywords}, '%')
|
|
|
@@ -68,27 +71,23 @@
|
|
|
<if test="q.subCateId != null">
|
|
|
AND uc.sub_cate_id = #{q.subCateId}
|
|
|
</if>
|
|
|
- GROUP BY DATE(wl.create_time), wl.course_id
|
|
|
- ) x
|
|
|
- INNER JOIN fs_user_course uc ON uc.course_id = x.course_id
|
|
|
+ GROUP BY DATE(e.create_time), e.course_id
|
|
|
+ ) m
|
|
|
+ LEFT JOIN fs_user_course uc ON uc.course_id = m.course_id
|
|
|
LEFT JOIN fs_user_course_category pc ON pc.cate_id = uc.cate_id AND IFNULL(pc.is_del, 0) = 0
|
|
|
LEFT JOIN fs_user_course_category sc ON sc.cate_id = uc.sub_cate_id AND IFNULL(sc.is_del, 0) = 0
|
|
|
LEFT JOIN (
|
|
|
SELECT
|
|
|
- DATE(e.create_time) AS dt,
|
|
|
- e.course_id AS course_id,
|
|
|
- SUM(CASE WHEN e.event_type = 0 THEN 1 ELSE 0 END) AS exposure_pv,
|
|
|
- COUNT(DISTINCT CASE WHEN e.event_type = 0 THEN e.user_id END) AS exposure_uv,
|
|
|
- SUM(CASE WHEN e.event_type = 1 THEN 1 ELSE 0 END) AS click_pv,
|
|
|
- COUNT(DISTINCT CASE WHEN e.event_type = 1 THEN e.user_id END) AS click_uv,
|
|
|
- MAX(CASE WHEN e.event_type = 0 AND e.exposure_position = 0 THEN 1 ELSE 0 END) AS has_home,
|
|
|
- MAX(CASE WHEN e.event_type = 0 AND e.exposure_position = 1 THEN 1 ELSE 0 END) AS has_center
|
|
|
- FROM fs_course_marketing_event e
|
|
|
- WHERE e.create_time >= #{q.beginDate}
|
|
|
- AND e.create_time < DATE_ADD(#{q.endDate}, INTERVAL 1 DAY)
|
|
|
- GROUP BY DATE(e.create_time), e.course_id
|
|
|
- ) m ON m.dt = x.stat_date AND m.course_id = x.course_id
|
|
|
- ORDER BY x.stat_date DESC, x.course_id DESC
|
|
|
+ DATE(wl.create_time) AS stat_date,
|
|
|
+ wl.course_id AS course_id,
|
|
|
+ COUNT(DISTINCT wl.user_id) AS watch_uv,
|
|
|
+ COUNT(DISTINCT CASE WHEN wl.log_type = 2 THEN wl.user_id END) AS finish_uv
|
|
|
+ FROM fs_course_watch_log wl
|
|
|
+ WHERE wl.create_time >= #{q.beginDate}
|
|
|
+ AND wl.create_time < DATE_ADD(#{q.endDate}, INTERVAL 1 DAY)
|
|
|
+ GROUP BY DATE(wl.create_time), wl.course_id
|
|
|
+ ) w ON w.stat_date = m.stat_date AND w.course_id = m.course_id
|
|
|
+ ORDER BY m.stat_date DESC, m.course_id DESC
|
|
|
</select>
|
|
|
|
|
|
<select id="selectCatalogStatList" resultType="com.fs.course.vo.PublicCourseWatchStatCatalogVO">
|
|
|
@@ -200,4 +199,29 @@
|
|
|
sc.cate_name
|
|
|
ORDER BY v.video_id DESC
|
|
|
</select>
|
|
|
+
|
|
|
+ <!-- 查询目录下用户学习记录 -->
|
|
|
+ <select id="selectCatalogUserStudyList" resultType="com.fs.course.vo.CatalogUserStudyVO">
|
|
|
+ SELECT
|
|
|
+ wl.user_id AS userId,
|
|
|
+ u.nick_name AS nickName,
|
|
|
+ u.phone AS phone,
|
|
|
+ COALESCE(SUM(CASE WHEN COALESCE(wl.duration, 0) > 0 THEN wl.duration ELSE 0 END), 0) AS totalDuration,
|
|
|
+ MIN(wl.create_time) AS firstWatchTime,
|
|
|
+ MAX(wl.create_time) AS lastWatchTime
|
|
|
+ FROM fs_course_watch_log wl
|
|
|
+ LEFT JOIN fs_user u ON u.user_id = wl.user_id
|
|
|
+ <where>
|
|
|
+ wl.video_id = #{videoId}
|
|
|
+ AND wl.user_id IS NOT NULL
|
|
|
+ <if test="nickName != null and nickName != ''">
|
|
|
+ AND u.nick_name LIKE CONCAT('%', #{nickName}, '%')
|
|
|
+ </if>
|
|
|
+ <if test="phone != null and phone != ''">
|
|
|
+ AND u.phone LIKE CONCAT('%', #{phone}, '%')
|
|
|
+ </if>
|
|
|
+ </where>
|
|
|
+ GROUP BY wl.user_id, u.nick_name, u.phone
|
|
|
+ ORDER BY wl.user_id DESC
|
|
|
+ </select>
|
|
|
</mapper>
|