sql - 基于相关行数的 SQL 过滤查询
问题描述
我很难解决这个问题。
在处理了一些查询之后,我得到了这样的结果:
SELECT col1, col2 FROM Whatever;
col1 col2
1 100
2 200
3 200
2 100
我想2
退出这个,因为2
它的唯一值col1
对应于col2
(100
和200
) 的每个现有值。例如,如果还有另一行,4 400
那么我想要一个空结果,因为没有行满足这个条件。
我以为ALL
可以帮助我,但后来我意识到它没有用。对于阅读的内容,即使是最轻微的提示,我也将不胜感激。
提前致谢。
UPD:经过一番挖掘,我得出结论,我需要关系划分,即
Whatever <relational division> SELECT DISTINCT col2 FROM Whatever
解决方案
一种方法使用窗口函数:
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
.
推荐阅读
- python - Python:在数组中查找最大元素X的子数组,其总和小于或等于给定数字
- sparql - SPARQL 上的超级简单查询什么也不检索
- .net - 检索现有 Azure 表项时 TableResult 挂起
- realex-payments-api - 将信息传递给 Global Payments HPP
- python - 在同一张量纤维中不止一个为真
- windows - Octave 中的奇怪问题:`char(97)` 未在控制台中显示结果
- swift - 在swift中使用present时如何阻止ViewController闪烁
- django - 为什么我无法通过 gitlab CI 更新我的 heroku 应用程序
- oracle - 验证时隐藏的堆叠画布
- python - 有没有办法在 Python 3 中将卸载程序写入程序并自行删除?