【发布时间】:2011-02-06 15:01:03
【问题描述】:
我需要从两个字段中获取最大的价值:
SELECT MAX(field1), MAX(field2)
现在,我怎样才能从这两者中获得最大的价值?
【问题讨论】:
-
GREATEST()是最大的,LEAST()是最小的。
标签: mysql
我需要从两个字段中获取最大的价值:
SELECT MAX(field1), MAX(field2)
现在,我怎样才能从这两者中获得最大的价值?
【问题讨论】:
GREATEST() 是最大的,LEAST() 是最小的。
标签: mysql
您可能想要使用GREATEST() 函数:
SELECT GREATEST(field1, field2);
如果您想从所有行中获取绝对最大值,那么您可能需要使用以下内容:
SELECT GREATEST(MAX(field1), MAX(field2));
示例 1:
SELECT GREATEST(1, 2);
+----------------+
| GREATEST(1, 2) |
+----------------+
| 2 |
+----------------+
1 row in set (0.00 sec)
示例 2:
CREATE TABLE a (a int, b int);
INSERT INTO a VALUES (1, 1);
INSERT INTO a VALUES (2, 1);
INSERT INTO a VALUES (3, 1);
INSERT INTO a VALUES (1, 2);
INSERT INTO a VALUES (1, 4);
SELECT GREATEST(MAX(a), MAX(b)) FROM a;
+--------------------------+
| GREATEST(MAX(a), MAX(b)) |
+--------------------------+
| 4 |
+--------------------------+
1 row in set (0.02 sec)
【讨论】:
GREATEST(MAX(field1), MAX(field2)) 有效。否则返回错误的数字(不是最大的)
SELECT GREATEST(MAX(field1), MAX(field2)); 才能从所有行中获取绝对最大值。如果您使用SELECT GREATEST(field1, field2);,您将返回一个结果集,其中每一行的字段1 和字段2 之间的最大值。
MAX() 必须在处理行时保持运行最大值,因此使用MAX(GREATEST(field1,field2)) 可能会更有效。
如果您为每一行选择 GREATEST()
SELECT GREATEST(field1, field2)
如果其中一个字段为 NULL,它将返回 NULL。你可以使用 IFNULL 来解决这个问题
SELECT GREATEST(IFNULL(field1, 0), IFNULL(field2, 0))
【讨论】:
IFNULLs!
mysql> SELECT GREATEST(2,0);
-> 2
那么,试试吧:
mysql> SELECT GREATEST(MAX(field1), MAX(field2));
【讨论】:
SELECT max( CASE
WHEN field1 > field2 THEN field1
ELSE field2
END ) as biggestvalue
FROM YourTable;
【讨论】:
使用 GREATEST/LEAST 和 MIN/MAX
GREATEST/LEAST:与列一起使用,当您想从各个列中查找最大值或最小值时。
MIN/MAX:与行一起使用,当您想从各个行中找到最大值或最小值时:
示例表:
SELECT GREATEST(col_a, col_b, col_c) FROM temp;
SELECT MIN(GREATEST(col_a, col_b, col_c)) FROM temp; # 3 as output
SELECT MAX(GREATEST(col_a, col_b, col_c)) FROM temp; # 9 as output
SELECT LEAST(col_a, col_b, col_c) FROM temp;
SELECT MIN(LEAST(col_a, col_b, col_c)) FROM temp; # 1 as output
SELECT MAX(LEAST(col_a, col_b, col_c)) FROM temp; # 7 as output
【讨论】: