WITH VideoCompletion AS (
SELECT
v.video_id,
v.screen_type,
v.if_AI_talking,
v.if_hint,
COUNT(DISTINCT CASE WHEN TIMESTAMPDIFF(SECOND, u.start_time, u.end_time) >= v.duration THEN u.uid END) AS completed_views,
COUNT(DISTINCT u.uid) AS total_views
FROM
ks_video_inf v
JOIN
ks_video_wat_log u ON v.video_id = u.video_id
WHERE
u.start_time >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH)
GROUP BY
v.video_id, v.screen_type, v.if_AI_talking, v.if_hint
),
PivotTable AS (
SELECT
screen_type,
SUM(CASE WHEN if_AI_talking = 1 AND if_hint = 1 THEN completed_views ELSE 0 END) / NULLIF(SUM(CASE WHEN if_AI_talking = 1 AND if_hint = 1 THEN total_views ELSE 0 END), 0) * 100 AS AI_with_hint,
SUM(CASE WHEN if_AI_talking = 1 AND if_hint = 0 THEN completed_views ELSE 0 END) / NULLIF(SUM(CASE WHEN if_AI_talking = 1 AND if_hint = 0 THEN total_views ELSE 0 END), 0) * 100 AS AI_no_hint,
SUM(CASE WHEN if_AI_talking = 0 AND if_hint = 1 THEN completed_views ELSE 0 END) / NULLIF(SUM(CASE WHEN if_AI_talking = 0 AND if_hint = 1 THEN total_views ELSE 0 END), 0) * 100 AS no_AI_with_hint,
SUM(CASE WHEN if_AI_talking = 0 AND if_hint = 0 THEN completed_views ELSE 0 END) / NULLIF(SUM(CASE WHEN if_AI_talking = 0 AND if_hint = 0 THEN total_views ELSE 0 END), 0) * 100 AS no_AI_no_hint
FROM
VideoCompletion
GROUP BY
screen_type
)
SELECT
screen_type,
ROUND(AI_with_hint, 2) AS AI_with_hint,
ROUND(AI_no_hint, 2) AS AI_no_hint,
ROUND(no_AI_with_hint, 2) AS no_AI_with_hint,
ROUND(no_AI_no_hint, 2) AS no_AI_no_hint
FROM
PivotTable;
WITH TagSplit AS (
SELECT
v.video_id,
TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(v.tag, ' ', n.n), ' ', -1)) AS tag
FROM
ks_video_inf v
JOIN
(SELECT 1 + units.i + tens.i * 10 AS n
FROM (SELECT 0 i UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) units,
(SELECT 0 i UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) tens
WHERE 1 + units.i + tens.i * 10 <= (SELECT MAX(LENGTH(tag) - LENGTH(REPLACE(tag, ' ', '')) + 1) FROM ks_video_inf)
) n ON n.n <= LENGTH(v.tag) - LENGTH(REPLACE(v.tag, ' ', '')) + 1
),
TagPlays AS (
SELECT
ts.tag,
COUNT(1) AS total_plays
FROM
TagSplit ts
JOIN
ks_video_inf v ON ts.video_id = v.video_id
JOIN
ks_video_wat_log u ON v.video_id = u.video_id
WHERE
u.start_time >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH)
GROUP BY
ts.tag
)
SELECT
tag,
total_plays
FROM
TagPlays
ORDER BY
total_plays DESC
LIMIT 1;
with inf as (select
uid,count(distinct k1.video_id) as cnt
from
ks_video_wat_log k1
left join
ks_video_inf k2
on
k1.video_id=k2.video_id
where
timestampdiff(second,k1.start_time,k1.end_time)>=k2.duration
and
duration>=180
andk1.start_time >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH)
group by uid
having count(distinct k1.video_id)>=2)
select count( distinct uid) from inf
with inf as (select
uid,count(distinct k1.video_id) as cnt
from
ks_video_wat_log k1
left join
ks_video_inf k2
on
k1.video_id=k2.video_id
where
timestampdiff(second,k1.start_time,k1.end_time)>=k2.duration
and
duration>=180
andk1.start_time >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH)
group by uid
having count(distinct k1.video_id)>2)
select count( distinct uid) from inf
with inf as (select
uid,count(distinct k1.video_id) as cnt
from
ks_video_wat_log k1
inner join
ks_video_inf k2
on
k1.video_id=k2.video_id
where
timestampdiff(second,k1.start_time,k1.end_time)>=k2.duration
and
duration>180
andk1.start_time >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH)
group by uid
having cnt>2)
select count(uid) from inf
with inf as (select
uid,count(distinct k1.video_id) as cnt
from
ks_video_wat_log k1
inner join
ks_video_inf k2
on
k1.video_id=k2.video_id
and
timestampdiff(second,k1.start_time,k1.end_time)>=k2.duration
where duration>180
andk1.start_time >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH)
group by uid
having cnt>2)
select count(uid) from inf
with inf as (select
uid,count(distinct k1.video_id) as cnt
from
ks_video_wat_log k1
inner join
ks_video_inf k2
on
k1.video_id=k2.video_id
and
timestampdiff(second,k1.start_time,k1.end_time)>=k2.duration
where duration>180
group by uid
having cnt>2)
select count(uid) from inf
SELECT
v.video_id,
v.title,
ROUND(
(COUNT(DISTINCT CASE WHEN TIMESTAMPDIFF(SECOND, u.start_time, u.end_time) >= v.duration THEN u.uid END) /
COUNT(DISTINCT u.uid)) * 100,
4
) AS completion_rate
FROM
ks_video_inf v
JOIN
ks_video_wat_log u ON v.video_id = u.video_id
WHERE
u.start_time >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH)
GROUP BY
v.video_id, v.title
ORDER BY
completion_rate DESC
LIMIT 5;
SELECT
v.video_id,
v.title,
ROUND(
(SUM(CASE WHEN TIMESTAMPDIFF(SECOND, u.start_time, u.end_time) >= v.duration THEN 1 ELSE 0 END) / COUNT(u.uid)) * 100,
2
) AS completion_rate
FROM
ks_video_inf v
JOIN
ks_video_wat_log u ON v.video_id = u.video_id
WHERE
u.start_time >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH)
GROUP BY
v.video_id, v.title
HAVING
COUNT(u.uid) > 1
ORDER BY
completion_rate DESC
LIMIT 5;
SELECT
v.video_id,
v.title,
ROUND(SUM((TIMESTAMPDIFF(SECOND, u.start_time, u.end_time))) / 3600, 2) AS total_play_duration_hours
FROM
ks_video_inf v
JOIN
ks_video_wat_log u ON v.video_id = u.video_id
WHERE
u.start_time >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH)
GROUP BY
v.video_id, v.title
ORDER BY
total_play_duration_hours DESC
LIMIT 5;
select
ks_video_wat_log.video_id,title,count(uid),sum(if_like),sum(if_retweet),sum(if_fav),sum(if_like)+sum(if_retweet)+sum(if_fav)
from
ks_video_wat_log
left join
ks_video_inf
on
ks_video_wat_log.video_id=ks_video_inf.video_id
group by 1
order by 7 desc
limit 3
;
select
ks_video_wat_log.video_id,title,count(uid),sum(if_like),sum(if_retweet),sum(if_fav),sum(if_like)+sum(if_retweet)+sum(if_fav)
from
ks_video_wat_log
left join
ks_video_inf
on
ks_video_wat_log.video_id=ks_video_inf.video_id
group by 1
limit 3
;
select
ks_video_wat_log.video_id,title,count(uid),sum(if_like),sum(if_retweet),sum(if_fav),sum(if_like)+sum(if_retweet)+sum(if_fav)
from
ks_video_wat_log
left join
ks_video_inf
on
ks_video_wat_log.video_id=ks_video_inf.video_id
group by 1
limit 10
;
select
ks_video_wat_log.video_id,title,count(uid),sum(if_like),sum(if_retweet),sum(if_fav),sum(if_like)+sum(if_retweet)+sum(if_fav)
from
ks_video_wat_log
left join
ks_video_inf
on
ks_video_wat_log.video_id=ks_video_inf.video_id
group by 1
;
with act as (
select usr_id,live_id,enter_time as act_time, 1 as acta
from ks_live_t1
union all
select usr_id,live_id,leave_time as act_time,-1 as acta
from ks_live_t1
),
point as (
select
live_id,act_time,sum(acta) over(partition by live_id order by act_time) as psum
from act
),
rr as (
select
live_id,max(psum) as hrn from point
group by live_id
)
select
rr.live_id,live_nm,hrn as max_online_users,min(act_time),max(act_time)
from
rr
left join
ks_live_t2
on rr.live_id=ks_live_t2.live_id
left join
point
on rr.live_id=point.live_id and rr.hrn=point.psum
group by 1,2,3
with act as (
select usr_id,live_id,enter_time as act_time, 1 as acta
from ks_live_t1
union all
select usr_id,live_id,leave_time as act_time,-1 as acta
from ks_live_t1
),
point as (
select
live_id,act_time,sum(acta) over(partition by live_id order by act_time) as psum
from act
),
rr as (
select
live_id,max(psum) as hrn from point
group by live_id
)
select rr.live_id,live_nm,hrn from rr
join ks_live_t2
on rr.live_id=ks_live_t2.live_id
order by hrn desc
select
ks_live_t1.live_id,live_nm,count(distinct usr_id)
from
ks_live_t1
join ks_live_t2
on ks_live_t1.live_id=ks_live_t2.live_id
where
enter_time<='2021-09-12 23:48:38'
and
leave_time>='2021-09-12 23:48:38'
group by
1,2
order by 3 desc
select
ks_live_t1.live_id,live_nm,count(distinct usr_id)
from
ks_live_t1
join ks_live_t2
on ks_live_t1.live_id=ks_live_t2.live_id
where
enter_time<='2021-09-12 11:48:38'
and
leave_time>='2021-09-12 11:48:38'
group by
1,2
order by 3 desc