SQL查询需求:筛选仅对应Column B值为A的Column A记录
筛选仅对应Column B值为A的Column A记录
需求说明
从指定表格中筛选出Column A的记录,要求这些Column A对应的Column B仅包含值A,不存在B或C(包含小写c)。
输入表
| Column A | Column B |
|---|---|
| 1 | A |
| 1 | B |
| 1 | C |
| 2 | A |
| 2 | B |
| 3 | A |
| 3 | B |
| 3 | c |
| 4 | A |
| 5 | A |
| 5 | B |
| 6 | A |
期望输出
| ColumnA |
|---|
| 4 |
| 6 |
解决方案
方法1:GROUP BY + HAVING 子句
通过分组统计确保每个Column A分组内仅存在A值:
SELECT "Column A" AS ColumnA FROM your_table GROUP BY "Column A" HAVING SUM(CASE WHEN "Column B" NOT IN ('A') THEN 1 ELSE 0 END) = 0;
逻辑说明:用CASE语句统计分组内非A的记录数,结果为0则表示该分组的Column B只有A。
方法2:NOT EXISTS 子查询
排除所有存在B/C/c的Column A:
SELECT DISTINCT "Column A" AS ColumnA FROM your_table t1 WHERE NOT EXISTS ( SELECT 1 FROM your_table t2 WHERE t1."Column A" = t2."Column A" AND t2."Column B" IN ('B', 'C', 'c') );
逻辑说明:子查询定位出所有包含非A值的Column A,外层查询排除这些记录,得到目标结果。
方法3:EXCEPT 集合运算
用集合差集筛选出仅对应A的Column A:
SELECT "Column A" AS ColumnA FROM your_table EXCEPT SELECT "Column A" FROM your_table WHERE "Column B" NOT IN ('A');
逻辑说明:先获取所有Column A,减去那些存在非A值的Column A,剩余即为符合要求的记录。
以上三种方法均可得到期望的输出结果。
内容的提问来源于stack exchange,提问作者Nagarjuna GS
相关产品推荐
相关产品推荐

