我想要获取 A 列的所有不同值,其中一行的 B 列等于 X,另一行的 B 列等于“Y”
结果将是这样的:
我尝试过这样的方式:
SELECT DISTINCT COLUMN_A
FROM TABLE
INNER JOIN (
SELECT DISTINCT COLUMN_A
FROM TABLE
WHERE COLUMN_B = 'X') SUBTABLE
ON TABLE.COLUMN_A = SUBTABLE.COLUMN_A
WHERE TABLE.COLUMN_B = 'Y';
我认为这个解决方案有效,但不是最佳
谢谢,祝你度过愉快的一天
最佳答案
您可以通过以下方式应用简单的聚合:
- 仅过滤您感兴趣的 Column_B 值
- 聚合 Column_B 的不同值
- 检查不同值的数量是否等于 2
SELECT Column_A
FROM tab
WHERE Column_B IN ('X', 'Y')
GROUP BY Column_A
HAVING COUNT(DISTINCT Column_B) = 2
或者您可以在以下之间使用INTERSECT
运算符:
- Column_B = 'X' 的记录
- Column_B = 'Y' 的记录
SELECT DISTINCT Column_A FROM tab WHERE Column_B = 'X'
INTERSECT
SELECT DISTINCT Column_A FROM tab WHERE Column_B = 'Y'
查看演示 here .
关于sql - 获取出现 2 次特定事件的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75099775/