求多列最大值、最小值的函数

本文介绍了在处理学生成绩信息表中,如何使用SQL的greatest()和least()函数获取多列的最高分和最低分,以及注意事项,包括函数对数据类型的要求和处理null值的方法。
摘要由CSDN通过智能技术生成

一、适用场景

一张学生成绩信息表,数据示例为:

姓名 语文 数学 英语 地理 生物
张三 100 90 100 90 70
李四 90 80 130 70 85

校长想查看张三、李四所有科目的最高分、最低分是多少。需求结果是:

姓名 最高分 最低分
张三 100 70
李四 130 70

max()/min()可以拿到单科最高分、最低分,但是针对多列数据求最值就不适用了。针对此类场景,就用到了多列最值函数greatest()、least()函数
多列最大值函数(计算输入参数的最大值):
greatest(var1,var2…)
多列最小值的函数(计算输入参数的最小值):
least(var1,var2…)
注意:
函数对数据类型有一定要求,如果多字段类型不一致,会类型转换(不同数据库、系统可能细节不一样,一般是string转double,或string转datetime),字段中含有null时,会将null判为最小值。

二、函数用法举例

SELECT  '张三' AS name
        ,GREATEST(100,90,100,90,70) AS 最高分
        ,LEAST(100,90,100,90,70) AS 最低分
UNION ALL
SELECT  '李四' AS name
        ,GREATEST(90,80,130,70,85) AS 最高分
        ,LEAST(90,80,130,70,85) AS 最低分
;
-- 注意:
-- 部分数据库不支持直接select
-- 可以后接临时表
-- SELECT  '张三' AS name
--         ,GREATEST(100,90,100,90,70) AS 最高分
--         ,LEAST(100,90,100,90,70) AS 最低分
--         from temp
--         limit 1--不加limit 1 可能会导致执行结果条数与表数据条数一致
--         ;

执行结果:

name 最高分 最低分
张三 100 70
李四 130 70

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值