7

有没有办法找到3个不同列的最大值?我正在尝试查找任何 3 列值高于指定值的记录,并试图避免在查询中做出这样的事情:

column1 > 69 or column2 > 69 or column3 > 69

表结构是这样的:

id | column1 | column2 | column3
1  |   5     |    4    |    3
2  |  70     |    1    |    65
3  |  66     |    3    |    90

并像这样选择:

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
4

2 回答 2

20

你需要使用GREATEST

像那样

    select id from tablex where GREATEST(column1, column2, column3) > 69
于 2013-07-24T22:03:38.090 回答
8

我想指出:

where GREATEST(column1, column2, column3) > 69;

一样

where column1 > 69 or column2 > 69 or column3 > 69;

第一个将过滤掉任何三列中的所有行NULL。第二个仍然会考虑这些行。您可以将查询重写GREATEST()为:

where GREATEST(coalesce(column1, 0), coalesce(column2, 0), coalesce(column3, 0)) > 69;

但这违背了更简单语法的目的。您可能知道列值是 never NULL,在这种情况下使用greatest()是可以的。但是,它不是一般的替代品。

于 2013-07-24T22:53:28.083 回答