我需要从两个领域中获得最大的价值:
SELECT MAX(field1), MAX(field2)
现在,我如何从这两个中获得最大的价值?
Answers:
您可能要使用以下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);
,将返回一个结果集,其中每一行的最大值在field1和field2之间。
如果您要为每一行选择GREATEST()
SELECT GREATEST(field1, field2)
它将返回NULL如果字段为NULL。您可以使用IFNULL解决此问题
SELECT GREATEST(IFNULL(field1, 0), IFNULL(field2, 0))
IFNULL
即使您有两个要比较的字段,您也必须做所有这些事情!
结合使用最大/最小和最小/最大
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
GREATEST()
对于最大的LEAST()
,对于最小的。