一、适用场景
一张学生成绩信息表,数据示例为:
姓名 语文 数学 英语 地理 生物
张三 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