一道SQL的问题

CREATE TABLE IF NOT EXISTS "score" (
`id` int(11) NOT NULL,
`name` varchar(20) NOT NULL,
`math` int(3) NOT NULL,
`english` int(3) NOT NULL,
`chinese` int(3) NOT NULL,);


如何查询出每个人获得最高分数的那个科目?
输出:
1 小明 chinese
2 小刚 english
3 小花 chinese

全部评论
create table tmp_table_row_transform_column SELECT name,fenshu,project FROM score unpivot(gproject FOR fenshu in(chinese,math,english))AS up select  name,project from(   select name,max(fenshu) as repeat_fenshu,project      from tmp_table_row_transform_column          group by name)a 行转列之后,group by 找到max哪一行信息就行了。
点赞 回复
分享
发布于 2018-09-18 09:20
插眼。。。
点赞 回复
分享
发布于 2018-09-18 02:00
滴滴
校招火热招聘中
官网直投
我的想法是先进行 行列转换,将这个表用union all转换成name-subject-grade的中间表,然后再用排序函数和partition by排一下每个人的分数科目的排名,最后把每个人的第一名的科目选出来就好了。
点赞 回复
分享
发布于 2018-09-18 03:12
同问
点赞 回复
分享
发布于 2018-09-18 07:26
可可以使用现成的函数?
点赞 回复
分享
发布于 2018-09-18 08:31
CASE WHEN 应该就能搞定了吧。 SELECT      NAME,     CASE WHEN  2*MATH>ENGLISH+CHINESE THEN  "MATH"               WHEN  2*ENGLISH>MATH+CHINESE  THEN  "ENGLISH"     ELSE  "CHINESE"  END AS MAX_SCORE_DESCIPLINE FROM SCORE
点赞 回复
分享
发布于 2018-09-18 09:42

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务