首页 > 解决方案 > 基于相关行数的 SQL 过滤查询

问题描述

我很难解决这个问题。

在处理了一些查询之后,我得到了这样的结果:

SELECT col1, col2 FROM Whatever;

col1 col2
1    100
2    200
3    200
2    100

我想2退出这个,因为2它的唯一值col1对应于col2(100200) 的每个现有值。例如,如果还有另一行,4 400那么我想要一个空结果,因为没有行满足这个条件。

我以为ALL可以帮助我,但后来我意识到它没有用。对于阅读的内容,即使是最轻微的提示,我也将不胜感激。

提前致谢。

UPD:经过一番挖掘,我得出结论,我需要关系划分,即

Whatever <relational division> SELECT DISTINCT col2 FROM Whatever

标签: sql

解决方案


一种方法使用窗口函数:

select col1, col2
from (select col1, col2,
             count(distinct col2) over () as num_col2,
             count(distinct col2) over (partition by col1) as num_col2_per_col1

      from whatever
     ) t
where num_col2 = num_col2_per_col1;

并非所有数据库都支持count(distinct)作为窗口函数。如果有必要,有很简单的解决方法,但count(distinct)作为窗口函数是标准 SQL。

如果您只想要“2”而不是所有行,请使用select distinct col1.


推荐阅读