[SQL][Quiz]找出栏位中最大值

内部训练题目

最近在帮部门内的同仁快快乐乐学T-SQL,想到一个好玩的题目给大家,假设有一个资料表Students,里面记录学生的三次考试成绩,需要找到三次中最高的成绩,请问要如何下SQL 呢 ?

这个是产生测试范例

SELECT * INTO #Students
FROM ( VALUES ( 'John' , 100, 90 , 80 ),( 'Tom' , 80, 90 , 100 ),( 'Eric' , 90, 90 , 70 ) ) Students( Name, Score1,Score2,Score3)
GO

SELECT * FROM #Students
GO

这里写图片描述
希望大家可以写超过三种以上的解法

1 使用CASE 的作法( 如果要判断的栏位不多是还算简单 )

SELECT Name, 
    CASE 
        WHEN ( Score1 >= Score2 ) AND ( Score1 >= Score3 ) THEN Score1
        WHEN ( Score2 >= Score1 ) AND ( Score2 >= Score3 ) THEN Score2
        WHEN ( Score3 >= Score1 ) AND ( Score3 >= Score2 ) THEN Score3
    END AS MaxScore
FROM #Students

2 在SELECT 使用VALUES 来转换,我比较喜欢的做法,但可能有些人不习惯这样的写法 )

SELECT Name , 
    ( SELECT Max(score) 
        FROM ( Values (Score1),(Score2),(Score3)) T(Score) ) AS MaxScore
    FROM #Students

3 利用UNION 将资料切分多笔,人工作UNPIVOT 的处理

SELECT Name, Max(Score) MaxScore FROM
(
    SELECT Name, Score1 AS Score
    FROM #Students
    UNION 
    SELECT Name, Score2
    FROM #Students
    UNION 
    SELECT Name, Score3 
    FROM #Students

) Students(Name, Score)
GROUP BY Name

4 跟3 的做法观念相同,但改用UNPIVOT 的指令来处理

SELECT Name, MAX(SCORE) AS MaxScore 
FROM #Students
UNPIVOT ( SCORE FOR DateVal IN ( Score1, Score2, Score3 ) ) AS ScoreTable
GROUP BY Name
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值