【发布时间】:2013-07-24 22:01:09
【问题描述】:
有没有办法找到 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
【问题讨论】:
-
RE:尽量避免做出这样的事情 为什么?它不是很长或很神秘。虽然一个衬垫很好,但如果它们都产生相同的结果,则性能更为重要。在选择方法之前,您可能需要检查查询计划。如果它们相同(我不知道它们是否相同),请选择您喜欢的那个。否则,我会使用更有效的语法。
-
是的,但这仍然是一个简单的一次性脚本,将不时使用。比性能本身更重要的是逻辑结构和可读性;)
-
啊,好吧。我没有意识到这是一次性的。在这种情况下,我同意性能不那么重要。如果您确实有机会查看查询计划,请告诉我们 ;-) 如果有任何区别,我会很好奇。
-
@Leigh,
OR查询更有可能使用索引。 -
@ypercube - 啊,好的,谢谢。我想我并不感到惊讶,因为将函数应用于过滤列通常会阻止数据库使用索引。