第三十四题统计复旦用户8月份练题情况
select
qpd.device_id,
up.university,
count(qpd.result) as question_cnt,
sum(if (qpd.result = 'right', 1, 0)) as right_question_cnt
from
question_practice_detail qpd
inner join user_profile up on qpd.device_id = up.device_id
where
up.university = '复旦大学'
and month (qpd.date) = 8
group by
device_id
inner join 是sql语句中的内连接,内连接, 可以只写JOIN ,只有连接的两个表中,都存在连接标准的数据才会保留下来,相当于两个表的交集。如果前后连接的是同一个表,也叫自连接。
IF(expr1,expr2,expr3)
如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。
第三十五题浙江大学难度题目的正确性
SELECT
qd.difficult_level,
sum(if (qpd.result = 'right', 1, 0)) / count(qpd.device_id) AS correct_rate
FROM
(
question_practice_detail AS qpd
LEFT JOIN user_profile AS u ON qpd.device_id = u.device_id
LEFT JOIN question_detail AS qd ON qpd.question_id = qd.question_id
)
WHERE
u.university = '浙江大学'
GROUP BY
qd.difficult_level
ORDER BY
correct_rate ASC;
这道题的要求比较多,分开来一步一步进行拆解。
第一步解决correct_rate是怎么算来的,sum(if (qpd.result = 'right', 1, 0)) / count(qpd.device_id) AS correct_rate。
第二步选出浙江大学 where u.unicersity=浙江大学。
第三步不同难度
GROUP BY
qd.difficult_level
第四步,排序 ordery by
第五步整理
第三十六题查找后排序
select device_id,age
from user_profile
order by age
order by 默认为从小到大排desc为从大到小排序。
第三十七题查找后多列排序
select device_id,gpa,age
from user_profile
order by gpa,age
直接用order by 来对他进行排序。
第三十八题查找后降序排序
select device_id,gpa,age
from user_profile
order by gpa desc, age desc
如果对两个数据进行排序,需要对每一个数据后面都加一个desc
第三十九题21年八月份练题数据
select
count(distinct device_id) as did_cnt ,
count(question_id) as question_cnt
from question_practice_detail
where date like'2021-08%'
考察like datelike 为date这一列中含有“2021-08 的数据