题解 | #每个题目和每份试卷被作答的人数和次数#

每个题目和每份试卷被作答的人数和次数

http://www.nowcoder.com/practice/203d0aed8928429a8978185d9a03babc

一、明确需求

 统计每个题目和每份试卷作答人数和次数

二、问题拆解

  1. 分别计算每份试卷和每道题目的作答人数和次数,结果作为表1和表2
  2. 对表1和表2 union 连接

三、代码实现

方法1:排序好后在union联结

select * 
from (
select exam_id,count(distinct uid) uv,count(uid) pv
from exam_record 
group by exam_id
order by uv desc,pv desc )x 
union 
select * 
from (
select question_id,count(distinct uid) uv,count(uid)pv
from practice_record
group by question_id
order by uv desc,pv desc )x 
  • 注意:要求分别对试卷数的uv和pv降序排后在接题目数的uv和pv的降序排

方法2:先union后再指定exam_id的左数排序

select exam_id as tid,count(distinct uid) uv,count(uid) pv
from exam_record 
group by exam_id
union 
select question_id as tid,count(distinct uid) uv,count(uid)pv
from practice_record
group by question_id
order by left(tid,1)desc,uv desc,pv desc 

四、拓展

  • 1、两个表之间的union只能有一个order by子句
  • 2、若要两个表的记录都分别准从排序规则,先分别排序后再用一个select*外套后再联结(如本题解方法1)
  • 3、自定义排序
order by left/right(col_name,num) desc/asc
按col_name的左/右边第num个数进行降序/升序排序
全部评论

相关推荐

03-29 14:19
门头沟学院 Java
你背过凌晨4点的八股文么:加油同学,人生的容错率很高,只是一个暑期罢了,后面还有很多机会!
点赞 评论 收藏
分享
ALEX_BLX:虽然说聊天记录不可信,不过这个趋势确实如此但我觉得也要想到一点就是卷后端的人里真正有“料”的人又有多少,我说的这个料都不是说一定要到大佬那种级别,而是就一个正常的水平。即使是现在也有很多人是跟风转码的,2-3个月速成后端技术栈的人数不胜数,但今时不同往日没可能靠速成进大厂了。这种情况就跟考研一样,你能上考场就已经打败一半的人了
点赞 评论 收藏
分享
评论
10
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务