题解 | #获得积分最多的人(二)#

获得积分最多的人(二)

http://www.nowcoder.com/practice/b6248d075d2d4213948b2e768080dc92

方法一:

第一题类似,但是需要构建一个新的同样的查询语句,使用having过滤,在过滤条件中取出最高的积分

select u.id, u.name, sum(g.grade_num) as grade_sum
from user u
join grade_info g
on u.id = g.user_id
group by u.id, u.name
having grade_sum = (select sum(grade_num) as grade_sum
										from grade_info g1
										group by user_id
										order by grade_sum desc
										limit 0, 1)
order by u.id

方法二:

使用 with ... as ... ,将一个查询当作一个表,语句更清晰,思路是和解决方案一是一样的

完整代码:

WITH t AS (
    SELECT  user_id,SUM(grade_num) AS grade_sum
    FROM grade_info
    GROUP BY user_id )
SELECT id,name,grade_sum
FROM t
JOIN user u ON u.id = t.user_id
WHERE grade_sum  = (SELECT MAX(grade_sum) FROM t)
# 与第一题类似,但是需要构建一个新的同样的查询语句,使用having过滤,在过滤条件中取出最高的积分
# select u.id, u.name, sum(g.grade_num) as grade_sum
# from user u
# join grade_info g
# on u.id = g.user_id
# group by u.id, u.name
# having grade_sum = (select sum(grade_num) as grade_sum
# 										from grade_info g1
# 										group by user_id
# 										order by grade_sum desc
# 										limit 0, 1)
# order by u.id
										

# with t as 解决方案,将一个查询当作一个表,语句更清晰,思路是和解决方案一是一样的
WITH t AS (
    SELECT  user_id,SUM(grade_num) AS grade_sum
    FROM grade_info
    GROUP BY user_id )
SELECT id,name,grade_sum
FROM t
JOIN user u ON u.id = t.user_id
WHERE grade_sum  = (SELECT MAX(grade_sum) FROM t)
ORDER BY id
SQL练习 文章被收录于专栏

已完成牛客的SQL练习。接下来是算法的练习

全部评论

相关推荐

点赞 评论 收藏
分享
有没有友友知道hr面会问什么我应该反问什么?还有如何防止hr套话啊?还有应该如果催hr推进快一点#字节#OPPO#hr面
牛客989988346号:职业规划,优缺点,为什么选择这个岗,对应聘公司产品的了解和满意度,如果让你改进公司产品你会怎么做,对ai(新技术)的了解,有无其他offer,什么时候能到岗
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务