sql - 获取出现 2 次特定事件的行

标签 sql oracle

<表类=“s-表”> <标题> Column_A Column_B <正文> 1 X 1 Z 2 X 2 是 3 是 4 X 4 是 4 Z 5 是

我想要获取 A 列的所有不同值,其中一行的 B 列等于 X,另一行的 B 列等于“Y”

结果将是这样的:

<表类=“s-表”> <标题> Column_A <正文> 1 4

我尝试过这样的方式:

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/

相关文章:

mysql - sql group by value within char(255) 字段的子字符串

php - SQL选择最近日期的多列

mysql - 有两个条件的两个字段的选择

oracle - 如何使用普通游标中的值打开 sys_refcursor?

sql - Oracle SQL "column ambiguously defined"和 `FETCH FIRST n ROWS ONLY`

database - 是否有适用于 Mac osx 的 Oracle DB 11g 或 10g?

php - 从每天的日期中选择mysql数据

sql - TSQL:如何获取用户在 Active Directory 中所属的组列表

java - Spring Boot Actuator/health 端点不显示数据库或文件系统信息

sql - 在我的查询中当 RowNum =1 时没有得到空值