SELECT b.exam_id exam_id, COUNT(DISTINCT uid) uv, ROUND(AVG(score), 1) avg_score FROM exam_record c JOIN user_info a USING(uid) JOIN examination_info b USING(exam_id) WHERE level > 5 AND tag = 'SQL' AND LEFT(start_time,11) = LEFT(submit_time, 11) # DATE_FORMAT(release_time,'%Y%MYD')=DATE_FORMAT(submit_time,'%Y%MYD')) GROUP BY(exam_id) ORDER BY uv DESC, avg_score ASC
要找题目id,作答人数,平均分
首先观察表,发现三个表,由一个中间表c连接,所以先链接三个表,对应4,5,6行
然后看限制条件,等级为5、tag是SQL,当天 对应7行
再在选择部分使用聚合函数,因为题目id没有用聚合函数,所以需要在后面使用分组函数
最后再使用排序语句
踩的坑,没有理解好题意,是人数,我最开始理解成次数了,老是错误。
sql'还是偏重业务
同时判断是否当天也看到了一个很优雅的写法,我直接截断的字符串