Sql 如何使用单个where语句为条件选择多个列?

Sql 如何使用单个where语句为条件选择多个列?,sql,vertica,Sql,Vertica,我正在为不同时间范围的计算做一些异常值检测 如何在Vertica SQL中清理以下内容 Select * FROM my_table WHERE ( (expected_value * 100) > measure_10_sec OR (expected_value * 100) > measure_20_sec OR (expected_value * 100) > measure_30_sec OR (expe

我正在为不同时间范围的计算做一些异常值检测

如何在Vertica SQL中清理以下内容

Select * FROM my_table
WHERE (    
         (expected_value * 100) > measure_10_sec 
      OR (expected_value * 100) > measure_20_sec
      OR (expected_value * 100) > measure_30_sec
      OR (expected_value * 100) > measure_40_sec
      OR (expected_value * 100) > measure_50_sec
      OR (expected_value * 100) > measure_60_sec
)
要创建更漂亮的查询,请执行以下操作:

Select * FROM my_table
WHERE (expected_value* 100) > (measure_10_sec, measure_20_sec, measure_30_sec, measure_40_sec, measure_50_sec, measure_60_sec)

您可以使用
ANY
检查左操作符是否满足子查询中任何右操作符的操作

...
WHERE expected_value * 100 > ANY(SELECT measure_10_sec
                                 UNION ALL
                                 SELECT measure_20_sec
                                 ...
                                 UNION ALL
                                 SELECT measure_50_sec
                                 UNION ALL
                                 SELECT measure_60_sec)
...

注意:我不确定您的DBMS是否支持
SELECT
而不支持
FROM
语法。文档建议这样做,但您可能需要找到另一个子查询来获取值。

您可以使用
ANY
检查左操作符是否满足子查询中任何右操作符的操作

...
WHERE expected_value * 100 > ANY(SELECT measure_10_sec
                                 UNION ALL
                                 SELECT measure_20_sec
                                 ...
                                 UNION ALL
                                 SELECT measure_50_sec
                                 UNION ALL
                                 SELECT measure_60_sec)
...
注意:我不确定您的DBMS是否支持
SELECT
而不支持
FROM
语法。文档建议这样做,但您可能需要找到另一个子查询来获取值。

只需使用
LEAST()

如果
预期值*100
大于其中一个值,则该值大于最小值

注意:这假设所有度量值都是非空的

如果使用
而不是
,那么您将使用
最大的()

只要使用
最小的()

如果
预期值*100
大于其中一个值,则该值大于最小值

注意:这假设所有度量值都是非空的


如果使用
而不是
,那么您将使用
最大值()

什么是“测量xx秒”的值?如果它按照它的名字来做,那么你肯定只需要(预期值*100)>测量10秒?@Barrypicanni-那是行不通的。其他度量值可能是异常值,而度量值_10_秒不是异常值。“度量值_xx_秒”的值是什么?如果它按照它的名字来做,那么你肯定只需要(预期值*100)>测量10秒?@Barrypicanni-那是行不通的。其他度量值可能是异常值,而度量值10秒并不完美。谢谢,太好了。非常感谢。