如何使用单个 where 语句 select 一个条件的多个列?
How can I select multiple columns for a condition with a single where statement?
我正在为不同时间范围的计算做一些离群值检测。
如何在 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 是否支持不带 FROM
语法的 SELECT
。文档建议这样做,但您可能需要找到另一个子查询来获取值。
只需使用LEAST()
:
select *
from my_table
where (expected_value * 100) > least(measure_10_sec, measure_20_sec, measure_30_sec, measure_40_sec, measure_50_sec, measure_60_sec)
如果 expected_value * 100
大于其中一个值,则它大于最小值。
注意:这假设所有的措施都是非NULL
。
如果使用 AND
而不是 OR
,那么您将使用 GREATEST()
。
我正在为不同时间范围的计算做一些离群值检测。
如何在 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 是否支持不带 FROM
语法的 SELECT
。文档建议这样做,但您可能需要找到另一个子查询来获取值。
只需使用LEAST()
:
select *
from my_table
where (expected_value * 100) > least(measure_10_sec, measure_20_sec, measure_30_sec, measure_40_sec, measure_50_sec, measure_60_sec)
如果 expected_value * 100
大于其中一个值,则它大于最小值。
注意:这假设所有的措施都是非NULL
。
如果使用 AND
而不是 OR
,那么您将使用 GREATEST()
。