来自两个或多个字段的最大值

我需要从两个领域获得最大的价值:

SELECT MAX(field1), MAX(field2)

现在,我怎样才能从这两个中得到最大的价值呢?

77466 次浏览

You may want to use the GREATEST() function:

SELECT GREATEST(field1, field2);

If you want to get the absolute maximum from all the rows, then you may want to use the following:

SELECT GREATEST(MAX(field1), MAX(field2));

Example 1:

SELECT GREATEST(1, 2);
+----------------+
| GREATEST(1, 2) |
+----------------+
|              2 |
+----------------+
1 row in set (0.00 sec)

Example 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)
SELECT max( CASE
WHEN field1 > field2 THEN field1
ELSE field2
END ) as biggestvalue
FROM YourTable;
mysql> SELECT GREATEST(2,0);
-> 2

So, try:

mysql> SELECT GREATEST(MAX(field1), MAX(field2));

In case you're selecting the GREATEST() for each row

SELECT GREATEST(field1, field2)

It will return NULL if one of the fields is NULL. You could use IFNULL to solve this

SELECT GREATEST(IFNULL(field1, 0), IFNULL(field2, 0))

Use of GREATEST/LEAST with MIN/MAX

GREATEST/LEAST: used with the columns, when you want to find the max or min value from the various columns.

MIN/MAX: used with the rows, when you want to find the max or min value from the various rows:

Example table:

enter image description here

SELECT GREATEST(col_a, col_b, col_c) FROM temp;

enter image description here

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;

enter image description here

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