|
|
@@ -279,4 +279,90 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|
|
WHERE live_id = #{liveData.liveId}
|
|
|
</foreach>
|
|
|
</update>
|
|
|
+
|
|
|
+ <!-- 查询直播间统计数据 -->
|
|
|
+ <select id="selectLiveDataStatistics" resultType="com.fs.live.vo.LiveDataStatisticsVo">
|
|
|
+ SELECT
|
|
|
+ COUNT(DISTINCT lwu.user_id) AS totalViewers,
|
|
|
+ COUNT(DISTINCT CASE WHEN l.live_type = 1 THEN lwu.user_id END) AS liveViewers,
|
|
|
+ COUNT(DISTINCT CASE WHEN l.live_type = 3 THEN lwu.user_id END) AS playbackViewers,
|
|
|
+ COALESCE(AVG(CASE WHEN l.live_type = 1 THEN lwu.online_seconds END), 0) AS liveAvgDuration,
|
|
|
+ COALESCE(AVG(CASE WHEN l.live_type = 3 THEN lwu.online_seconds END), 0) AS playbackAvgDuration,
|
|
|
+ COUNT(DISTINCT CASE
|
|
|
+ WHEN lwu.online_seconds >= COALESCE(video_duration.total_duration, 0) AND video_duration.total_duration > 0
|
|
|
+ THEN lwu.user_id
|
|
|
+ END) AS totalCompletedCourses,
|
|
|
+ COUNT(DISTINCT CASE
|
|
|
+ WHEN l.live_type = 1 AND lwu.online_seconds >= COALESCE(video_duration.total_duration, 0) AND video_duration.total_duration > 0
|
|
|
+ THEN lwu.user_id
|
|
|
+ END) AS liveCompletedCourses,
|
|
|
+ COUNT(DISTINCT CASE
|
|
|
+ WHEN l.live_type = 3 AND lwu.online_seconds >= COALESCE(video_duration.total_duration, 0) AND video_duration.total_duration > 0
|
|
|
+ THEN lwu.user_id
|
|
|
+ END) AS playbackCompletedCourses,
|
|
|
+ COALESCE(SUM(lo.pay_price), 0) AS gmv,
|
|
|
+ COUNT(DISTINCT CASE WHEN lo.is_pay = '1' THEN lo.user_id END) AS paidUsers,
|
|
|
+ COUNT(DISTINCT CASE WHEN lo.is_pay = '1' THEN lo.order_id END) AS paidOrders,
|
|
|
+ COUNT(DISTINCT CASE WHEN lo.is_pay = '1' THEN lo.order_id END) AS salesCount
|
|
|
+ FROM live l
|
|
|
+ LEFT JOIN live_watch_user lwu ON l.live_id = lwu.live_id
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT live_id, SUM(COALESCE(duration, 0)) AS total_duration
|
|
|
+ FROM live_video
|
|
|
+ WHERE video_type IN (1, 2)
|
|
|
+ GROUP BY live_id
|
|
|
+ ) video_duration ON l.live_id = video_duration.live_id
|
|
|
+ LEFT JOIN live_order lo ON l.live_id = lo.live_id
|
|
|
+ WHERE l.live_id IN
|
|
|
+ <foreach collection="liveIds" item="liveId" open="(" separator="," close=")">
|
|
|
+ #{liveId}
|
|
|
+ </foreach>
|
|
|
+ </select>
|
|
|
+
|
|
|
+ <!-- 查询直播间列表数据 -->
|
|
|
+ <select id="selectLiveDataListByLiveIds" resultType="com.fs.live.vo.LiveDataListVo">
|
|
|
+ SELECT
|
|
|
+ l.live_id AS liveId,
|
|
|
+ l.live_name AS liveName,
|
|
|
+ l.live_type AS liveType,
|
|
|
+ l.status AS status,
|
|
|
+ l.start_time AS startTime,
|
|
|
+ l.finish_time AS finishTime,
|
|
|
+ COUNT(DISTINCT lwu.user_id) AS totalViewers,
|
|
|
+ COUNT(DISTINCT CASE WHEN l.live_type = 1 THEN lwu.user_id END) AS liveViewers,
|
|
|
+ COUNT(DISTINCT CASE WHEN l.live_type = 3 THEN lwu.user_id END) AS playbackViewers,
|
|
|
+ COALESCE(AVG(CASE WHEN l.live_type = 1 THEN lwu.online_seconds END), 0) AS liveAvgDuration,
|
|
|
+ COALESCE(AVG(CASE WHEN l.live_type = 3 THEN lwu.online_seconds END), 0) AS playbackAvgDuration,
|
|
|
+ COUNT(DISTINCT CASE
|
|
|
+ WHEN lwu.online_seconds >= COALESCE(video_duration.total_duration, 0) AND video_duration.total_duration > 0
|
|
|
+ THEN lwu.user_id
|
|
|
+ END) AS totalCompletedCourses,
|
|
|
+ COUNT(DISTINCT CASE
|
|
|
+ WHEN l.live_type = 1 AND lwu.online_seconds >= COALESCE(video_duration.total_duration, 0) AND video_duration.total_duration > 0
|
|
|
+ THEN lwu.user_id
|
|
|
+ END) AS liveCompletedCourses,
|
|
|
+ COUNT(DISTINCT CASE
|
|
|
+ WHEN l.live_type = 3 AND lwu.online_seconds >= COALESCE(video_duration.total_duration, 0) AND video_duration.total_duration > 0
|
|
|
+ THEN lwu.user_id
|
|
|
+ END) AS playbackCompletedCourses,
|
|
|
+ COALESCE(SUM(lo.pay_price), 0) AS gmv,
|
|
|
+ COUNT(DISTINCT CASE WHEN lo.is_pay = '1' THEN lo.user_id END) AS paidUsers,
|
|
|
+ COUNT(DISTINCT CASE WHEN lo.is_pay = '1' THEN lo.order_id END) AS paidOrders,
|
|
|
+ COUNT(DISTINCT CASE WHEN lo.is_pay = '1' THEN lo.order_id END) AS salesCount
|
|
|
+ FROM live l
|
|
|
+ LEFT JOIN live_watch_user lwu ON l.live_id = lwu.live_id
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT live_id, SUM(COALESCE(duration, 0)) AS total_duration
|
|
|
+ FROM live_video
|
|
|
+ WHERE video_type IN (1, 2)
|
|
|
+ GROUP BY live_id
|
|
|
+ ) video_duration ON l.live_id = video_duration.live_id
|
|
|
+ LEFT JOIN live_order lo ON l.live_id = lo.live_id
|
|
|
+ WHERE l.live_id IN
|
|
|
+ <foreach collection="liveIds" item="liveId" open="(" separator="," close=")">
|
|
|
+ #{liveId}
|
|
|
+ </foreach>
|
|
|
+ GROUP BY l.live_id, l.live_name, l.live_type, l.status, l.start_time, l.finish_time
|
|
|
+ ORDER BY l.start_time DESC
|
|
|
+ </select>
|
|
|
</mapper>
|