Biggest value from two or more fields

I need to get the biggest value from two fields:

SELECT MAX(field1), MAX(field2)

Now, how can I get biggest value from these two?


Solution 1:

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)

Solution 2:

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))

Solution 3:

mysql> SELECT GREATEST(2,0);
        -> 2

So, try:

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

Solution 4:

SELECT max( CASE
                WHEN field1 > field2 THEN field1
                ELSE field2
            END ) as biggestvalue 
FROM YourTable;