Is there any way to find maximum value of 3 different columns? I'm trying to find records with any of 3 columns value higher than specified value and trying to avoid making something like this in query:
column1 > 69 or column2 > 69 or column3 > 69
Table structure is like this:
id | column1 | column2 | column3
1  |   5     |    4    |    3
2  |  70     |    1    |    65
3  |  66     |    3    |    90
And select like this:
select id from tablex where column1 > 69 or column2 > 69 or column3 > 69
-- but with better query, a bit prettier like this (it doesn't work of course)
select id from tablex where MAX(column1, column2, column3) > 69
                you need to use GREATEST
like that
    select id from tablex where GREATEST(column1, column2, column3) > 69
                        I want to point out that:
where GREATEST(column1, column2, column3) > 69;
is not the same as:
where column1 > 69 or column2 > 69 or column3 > 69;
The first will filter out all rows where any of the three columns is NULL.  The second will still consider these rows.  You could rewrite the GREATEST() query as:
where GREATEST(coalesce(column1, 0), coalesce(column2, 0), coalesce(column3, 0)) > 69;
but that defeats the purpose of the simpler syntax.  You may know that the column values are never NULL, in which case using greatest() is ok.  But, it is not a general substitute.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With