题解 | #每类试卷得分前3名#

每类试卷得分前3名

http://www.nowcoder.com/practice/255aa1863fe14aa88694c09ebbc1dbca

SELECT tag, uid, ranking FROM(
    SELECT tag, uid,
    row_number() over(partition by tag order by MAX(score) DESC, MIN(score) DESC, uid DESC) AS ranking
    FROM examination_info,exam_record 
    WHERE examination_info.exam_id=exam_record.exam_id 
    GROUP BY tag,uid) a##按照这个分组后,窗口函数就能使用聚合函数的值
WHERE a.ranking<=3;

这里要mark的是,我转念一想可不可以这样,只做一次select:

SELECT tag, uid,
row_number() over(partition by tag order by MAX(score) DESC, MIN(score) DESC, uid DESC) AS ranking
FROM examination_info,exam_record 
WHERE examination_info.exam_id=exam_record.exam_id 
GROUP BY tag,uid
having ranking<=3;

结果是不行的,报错"You cannot use the alias 'ranking' of an expression containing a window function in this context.'"。问题出在不能用having ranking<=3。

全部评论
因为select执行顺序的关系吧:from where groupby having select窗口函数,所以You cannot use the alias 'ranking'
点赞 回复 分享
发布于 2022-02-20 10:25

相关推荐

暴走萝莉莉:这是社招场吧,作为HR说个实话:这个维护关系的意思是要有政府资源,在曾经的工作中通过人脉资源拿下过大订单的意思。这个有相关管理经验,意思也是真的要有同岗位经验。应酬什么的对于业务成交来说就算不乐意也是常态,就是要求说话好听情商高,酒量好。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务