首页 > 解决方案 > “IN”中带有子查询的“WHERE”子句

问题描述

我正在尝试(在 Impala SQL 上)获取两列之间差异最大/最小的行,我正在尝试这样的事情:

SELECT * 
FROM table 
WHERE col1 - col2 IN ( SELECT MAX(col1-col2) 
                       FROM table, SELECT MIN(col1-col2) FROM table )
 

仅使用一个子查询有效,但如果我将它们都添加到 IN 中,则会出现错误。

关于如何做到这一点的任何建议?

标签: sqlsubquerywhere-clauseimpala

解决方案


使用子查询连接:

SELECT * 
FROM table t
JOIN (
  SELECT MIN(col1 - col2) AS min_diff, MAX(col1 - col2) AS max_diff
  FROM table
) AS agg ON t.col1 - t.col2 IN (agg.min_diff, agg.max_diff)

推荐阅读