select
u.device_id,
university,
count(q.result) as question_cnt,
sum(case when q.result = 'right' then 1 else 0 end) as right_question_cnt
from
user_profile as u
left join question_practice_detail as q on u.device_id = q.device_id
and q.date like '2021-08%'
where
university = '复旦大学'
group by
u.device_id
- CASE WHEN q.result = 'right' THEN 1 ELSE 0 END:是一个条件表达式,逐行检查 q.result 是否等于 'right'。如果 q.result = 'right',则返回 1。如果 q.result 不等于 'right' 或为 NULL,则返回 0。
- SUM(...):SUM 是一个聚合函数,用于对一组值进行累加。在这里,它会对 CASE 表达式的结果进行累加。