面试sql题

面试问的Sql:给你一个表里面有六列,第一列为学生id,其余五列为该学生的各科成绩,请你利用sql输出两列,第一列为学生id,第二列为该学生前三高的成绩拼接
这个咋写,有牛油会嘛,说下思路也行
全部评论
SELECT stu_id ,CONCAT( MAX(CASE WHEN rnk = 1 THEN score END),'|' ,MAX(CASE WHEN rnk = 2 THEN score END),'|' ,MAX(CASE WHEN rnk = 3 THEN score END) ) AS top_grade FROM ( SELECT * ,row_number() over(PARTITION BY gt.stu_id ORDER BY score DESC) AS rnk FROM ( SELECT stu_id, '语文' AS SUBJECT, cn_grade AS score FROM grade UNION ALL SELECT stu_id, '数学' AS SUBJECT, mat_grade AS score FROM grade UNION ALL SELECT stu_id, '英语' AS SUBJECT, en_grade AS score FROM grade UNION ALL SELECT stu_id, '物理' AS SUBJECT, phcs_grade AS score FROM grade UNION ALL SELECT stu_id ,'化学' AS SUBJECT, chmc_grade AS score FROM grade ) gt ORDER BY stu_id ) a GROUP BY stu_id
5 回复 分享
发布于 2023-08-16 10:46 上海
先用窗口函数求出各个学生前三高的成绩 然后用group_concat函数聚合
2 回复 分享
发布于 2023-08-10 21:41 北京
那个公司呀
点赞 回复 分享
发布于 2023-08-28 17:20 陕西

相关推荐

评论
2
29
分享

创作者周榜

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