题解 | #每个题目和每份试卷被作答的人数和次数#
每个题目和每份试卷被作答的人数和次数
https://www.nowcoder.com/practice/203d0aed8928429a8978185d9a03babc
本题考察点包括两表纵向连接、分表排序,这道题最后的分表排序是参考其他答主完成的,但是感觉逻辑不是很准确,待解释完下列代码后po出疑问。
(select distinct exam_id tid, count(distinct uid) uv, count(uid) pv from exam_record group by tid) // ① 首先从作答记录表按试卷ID进行分组聚合查询 union // ③ 使用union进行两表连接,连接前需要保证各个字段名称相同 (select distinct question_id tid, count(distinct uid) uv, count(uid) pv from practice_record group by tid) // ② 其次采用类似的操作从练习表按题目ID进行分组聚合查询 order by left(tid, 1) desc, // 按uv、pv降序排列 uv desc, pv desc一个问题:如果试卷ID与题目ID是交错的,那么使用left(tid, 1) desc的方式显然是行不通的,此时应如何达到现有的排序要求?