题解 | #获得积分最多的人三,窗口函数排名取多个前几名#

获得积分最多的人(三)

https://www.nowcoder.com/practice/d2b7e2a305a7499fb310dc82a43820e8

SELECT
user_id id,
name,
b 	grade_num
FROM 
(
SELECT
user_id,
name,
b,
rank()  over(order by b desc) pai
FROM
(
SELECT
user_id,
sum(o) b
FROM
(
SELECT
user_id,
if(type="reduce",0-grade_num,grade_num) o
FROM 
grade_info
) a
GROUP BY user_id
) c
LEFT JOIN 
user d
ON c.user_id=d.id
) e
WHERE pai=1

多层嵌套子查询,多少有些丑陋

1.先把积分表里减少的积分转换为负数生成表a

2.按照user_id分组计算积分和,生成表c

3.把表c和user(表d)连接取得name,并对积分和进行排名,生成表e

4.从用where筛选出排名为1的数据

全部评论

相关推荐

2025-11-04 19:05
已编辑
东莞城市学院 单片机
不知道怎么取名字_:你这个要实习两年?哪有这么久的,感觉就是即使你毕业了,但还按实习的话,是不是不用给你缴社保公积金啥的
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务