SELECT * FROM ( SELECT exam_id tid, COUNT(DISTINCT uid) uv, COUNT(start_time) pv FROM exam_record GROUP BY tid ORDER BY uv DESC, pv DESC ) m UNION ALL SELECT * FROM ( SELECT question_id tid, COUNT(DISTINCT uid) uv, COUNT(score) pv FROM practice_record GROUP BY tid ORDER BY uv DESC, pv DESC ) n
找每个题目和每份试卷被作答的人数和次数
两张表,试卷表和练习题表,要做的就是取这两张表的对应数据:试卷、练习题id;作答人数(记得去重);作答次数(指的是做了就算,不管有没有成绩)
看到对两张表同时取数,第一时间想到UNION (ALL),这个关键词将两个或多个查询竖着拼接在一起,stack。
不加all会自动去重,加就不去。
但是如果想要分别排序,单纯的这样还不够,因为不对查询加()的话,只能有一个排序语句,就不能分别排序。
所以要将这两个查询包装起来,才能独立排序。(难点和重点)