基于相关行数的SQL筛选查询

时间:2018-11-21 16:21:37

标签: sql

我很难解决这个问题。

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

SELECT col1, col2 FROM Whatever;

col1 col2
1    100
2    200
3    200
2    100

我想从中抽出2,因为2col1的唯一值,因此它对应于col2的每个现有值({ {1}}和100)。如果还有另一行,例如200,那么我希望得到一个空结果,因为没有行可以满足此条件。

我本以为4 400可以帮助我,但是后来我意识到这没用。我什至希望得到关于阅读内容的丝毫提示。

谢谢。

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

ALL

1 个答案:

答案 0 :(得分:1)

一种方法使用窗口函数:

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