SELECT
u1.login_date,
CONCAT(
ROUND(
COUNT(u2.usr_id) / COUNT(u1.usr_id) * 100,
2
),
'%'
) AS T1_retention_rate
FROM (
SELECT
usr_id,
DATE(login_time) AS login_date
FROM user_login_log
GROUP BY usr_id, DATE(login_time)
) u1
LEFT JOIN (
SELECT
usr_id,
DATE(login_time) AS login_date
FROM user_login_log
GROUP BY usr_id, DATE(login_time)
) u2 ON u1.usr_id = u2.usr_id
AND u2.login_date = DATE_ADD(u1.login_date, INTERVAL 1 DAY)
WHERE DATEDIFF(CURRENT_DATE, u1.login_date) <= 30
GROUP BY u1.login_date
SELECT
COUNT(DISTINCT CASE
WHEN TIME(login_time) BETWEEN '07:30:00' AND '09:30:00'
OR TIME(login_time) BETWEEN '18:30:00' AND '20:30:00'
THEN usr_id
END) AS commute,
COUNT(DISTINCT CASE
WHEN TIME(login_time) BETWEEN '11:30:00' AND '14:00:00'
THEN usr_id
END) AS lunch_break,
COUNT(DISTINCT CASE
WHEN TIME(login_time) >= '22:30:00'
OR TIME(login_time) <= '01:00:00'
THEN usr_id
END) AS bedtime
FROM user_login_log
WHERE login_time >= DATE_FORMAT(DATE_SUB(CURRENT_DATE, INTERVAL 1 MONTH), '%Y-%m-01 00:00:00')
AND login_time < DATE_FORMAT(CURRENT_DATE, '%Y-%m-01 00:00:00');
select u1.login_date,
concat(round(count(u2.usr_id)/count(u1.usr_id)*100,2),'%') as T1_retention_rate
from(
select usr_id,
date(login_time) as login_date
from user_login_log
group by usr_id,date(login_time)) u1
left join(
select usr_id,
date(login_time) as login_date
from user_login_log
group by usr_id,date(login_time)) u2
on u1.usr_id = u2.usr_id and u2.login_date=date_add(u1.login_date,interval 1 day)
where datediff(current_date,u1.login_date)<=30
group by u1.login_date
SELECT
u1.login_date,
CONCAT(
ROUND(
COUNT(u2.usr_id) / COUNT(u1.usr_id) * 100,
2
),
'%'
) AS T1_retention_rate
FROM (
SELECT
usr_id,
DATE(login_time) AS login_date
FROM user_login_log
GROUP BY usr_id, DATE(login_time)
) u1
LEFT JOIN (
SELECT
usr_id,
DATE(login_time) AS login_date
FROM user_login_log
GROUP BY usr_id, DATE(login_time)
) u2 ON u1.usr_id = u2.usr_id
AND u2.login_date = DATE_ADD(u1.login_date, INTERVAL 1 DAY)
WHERE DATEDIFF(CURRENT_DATE, u1.login_date) <= 30
GROUP BY u1.login_date
;
SELECT
u1.login_date,
CONCAT(
ROUND(
COUNT(u2.usr_id) / COUNT(u1.usr_id) * 100,
2
),
'%'
) AS T1_retention_rate
FROM (
SELECT
usr_id,
DATE(login_time) AS login_date
FROM user_login_log
GROUP BY usr_id, DATE(login_time)
) u1
LEFT JOIN (
SELECT
usr_id,
DATE(login_time) AS login_date
FROM user_login_log
GROUP BY usr_id, DATE(login_time)
) u2 ON u1.usr_id = u2.usr_id
AND u2.login_date = DATE_ADD(u1.login_date, INTERVAL 1 DAY)
WHERE DATEDIFF(CURRENT_DATE, u1.login_date) <= 30
GROUP BY u1.login_date
ORDER BY u1.login_date;
select
si.singer_id,
si.singer_name,
ai.album_id,
ai.album_name,
count(lr.if_finished) as play_count
from singer_info si
join album_info ai on si.singer_id = ai.singer_id
left join song_info si2 on ai.album_id = si2.album_id
left join listen_rcd lr on si2.song_id = lr.song_id
group by si.singer_id, si.singer_name, ai.album_id, ai.album_name
having play_count = 0;
select lr.user_id,
dayname(lr.start_time) as day_of_week,
count(lr.if_finished) as listens_per_day
from listen_rcd lr
join qqmusic_user_info qq on lr.user_id = qq.user_id
group by lr.user_id, dayname(lr.start_time)
order by lr.user_id, day_of_week;
select qq.user_id,
dayname(lr.start_time) as day_of_week,
count(lr.if_finished) as listens_per_day
from listen_rcd lr
join qqmusic_user_info qq on lr.user_id = qq.user_id
group by qq.user_id, dayname(lr.start_time)
order by qq.user_id, day_of_week;
select student_id,chinese,math,english
from subject_score
group by student_id
having chinese >=110 and math >=110
union
select student_id,chinese,math,english
from subject_score
group by student_id
having chinese >=110 and english >=110
union
select student_id,chinese,math,english
from subject_score
group by student_id
having math >=110 and english >=110
order by student_id
select student_id,chinese,math,english
from subject_score
group by student_id
having chinese >=110 and math >=110
union all
select student_id,chinese,math,english
from subject_score
group by student_id
having chinese >=110 and english >=110
union all
select student_id,chinese,math,english
from subject_score
group by student_id
having math >=110 and english >=110
order by student_id
select student_id,chinese,math,english
from subject_score
group by student_id
having sum(chinese) + sum(math) >=110
union all
select student_id,chinese,math,english
from subject_score
group by student_id
having sum(chinese) + sum(english) >=110
union all
select student_id,chinese,math,english
from subject_score
group by student_id
having sum(math) + sum(math) >=110
order by student_id
select student_id,chinese,math,english
from subject_score
group by student_id
having sum(chinese) + sum(math) >=110
union all
select student_id,chinese,math,english
from subject_score
group by student_id
having sum(chinese) + sum(english) >=110
union all
select student_id,chinese,math,english
from subject_score
group by student_id
having sum(math) + sum(math) >=110
order by chinese,math,english
SELECT u1.login_date, CONCAT( ROUND( COUNT(u2.usr_id) / COUNT(u1.usr_id) * 100, 2 ), '%' ) AS T1_retention_rate FROM ( SELECT usr_id, DATE(login_time) AS login_date FROM user_login_log GROUP BY usr_id, DATE(login_time) ) u1 LEFT JOIN ( SELECT usr_id, DATE(login_time) AS login_date FROM user_login_log GROUP BY usr_id, DATE(login_time) ) u2 ON u1.usr_id = u2.usr_id AND u2.login_date = DATE_ADD(u1.login_date, INTERVAL 1 DAY) WHERE DATEDIFF(CURRENT_DATE, u1.login_date) <= 30 GROUP BY u1.login_dateSELECT COUNT(DISTINCT CASE WHEN TIME(login_time) BETWEEN '07:30:00' AND '09:30:00' OR TIME(login_time) BETWEEN '18:30:00' AND '20:30:00' THEN usr_id END) AS commute, COUNT(DISTINCT CASE WHEN TIME(login_time) BETWEEN '11:30:00' AND '14:00:00' THEN usr_id END) AS lunch_break, COUNT(DISTINCT CASE WHEN TIME(login_time) >= '22:30:00' OR TIME(login_time) <= '01:00:00' THEN usr_id END) AS bedtime FROM user_login_log WHERE login_time >= DATE_FORMAT(DATE_SUB(CURRENT_DATE, INTERVAL 1 MONTH), '%Y-%m-01 00:00:00') AND login_time < DATE_FORMAT(CURRENT_DATE, '%Y-%m-01 00:00:00');