南大通用GBase 8a通过GREATEST函数返回参数列表里的最大值,与MAX的区别

GBase 8a提供了greatest函数,返回参数列表里,最大的一个值。这个是针对当前行的多个列或表达式计算结果,而max函数是多行的某个列或表达式的最大值。

参考

GBase 8a通过LEAST函数返回参数列表里的最小值,与Min的区别

语法

GREATEST(value1,value2,...)

说明

当有两个或多个参数时,返回值为最大的参数值。
当参数中有一个为 NULL 时,直接返回 NULL
当参数都是字符串时,默认是不区分大小写的,如果希望进行字符串取值大小写
敏感的比较,则在需要敏感的字符串参数前加上 BINARY。
 这些参数比较使用下列规则:
• 如果返回值在 INTEGER 上下文中或者所有的参数是整型值,那么它们使用整数比较;
• 如果返回值在 REAL 上下文中或者所有的参数是实数值,那么它们使用实数比较;
• 如果所有的参数是大小写敏感的字符串,那么参数比较也是大小写敏感的;其它情况下,参数比较大小写不敏感。

如上注意,
1、不能有NULL,否则返回NULL
2、如果有数字,则全部按数字比较,会有隐形转换。

样例

全部数字

gbase> select greatest(1,2,3,4,5,6,7,8);
+---------------------------+
| greatest(1,2,3,4,5,6,7,8) |
+---------------------------+
|                         8 |
+---------------------------+
1 row in set (Elapsed: 00:00:00.00)

全部字符串

gbase> select greatest('a','A','b','c');
+---------------------------+
| greatest('a','A','b','c') |
+---------------------------+
| c                         |
+---------------------------+
1 row in set (Elapsed: 00:00:00.00)

混合字符和数字

gbase> select greatest('a','A','b','c',9);
+-----------------------------+
| greatest('a','A','b','c',9) |
+-----------------------------+
| 9                           |
+-----------------------------+
1 row in set, 4 warnings (Elapsed: 00:00:00.00)

gbase> show warnings;
+---------+------+---------------------------------------+
| Level   | Code | Message                               |
+---------+------+---------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: 'a' |
| Warning | 1292 | Truncated incorrect DOUBLE value: 'A' |
| Warning | 1292 | Truncated incorrect DOUBLE value: 'b' |
| Warning | 1292 | Truncated incorrect DOUBLE value: 'c' |
+---------+------+---------------------------------------+
4 rows in set (Elapsed: 00:00:00.00)

包含null

gbase> select greatest('a','A','b','c',null);
+--------------------------------+
| greatest('a','A','b','c',null) |
+--------------------------------+
| NULL                           |
+--------------------------------+
1 row in set (Elapsed: 00:00:00.00)