SQL查询需求:筛选同一Job下拥有至少两种不同Colour的Name
问题描述
我有如下数据表:
| ID | Name | job | Colour |
|---|---|---|---|
| 1 | Abby | Janitor | pink |
| 2 | Bob | teacher | yellow |
| 3 | Cam | Musician | blue |
| 4 | Bob | teacher | green |
| 5 | Abby | teacher | pink |
需要编写查询语句,获取满足以下条件的Name:同一Job下拥有至少两种不同的Colour。
本例中仅Bob会被返回。
解决方案
以下提供两种常见的SQL实现方式,将语句中的your_table_name替换为实际表名即可:
方法一:GROUP BY + HAVING 分组筛选
SELECT Name FROM your_table_name GROUP BY Name, job HAVING COUNT(DISTINCT Colour) >= 2;
逻辑说明
- 按
Name和job联合分组,确保统计范围是「同一用户+同一职位」的组合 COUNT(DISTINCT Colour)统计该分组内不同颜色的数量,筛选出数量≥2的分组,得到符合条件的Name
方法二:EXISTS 关联查询
SELECT DISTINCT t1.Name FROM your_table_name t1 WHERE EXISTS ( SELECT 1 FROM your_table_name t2 WHERE t1.Name = t2.Name AND t1.job = t2.job AND t1.Colour != t2.Colour );
逻辑说明
- 通过
EXISTS检查当前记录是否存在同Name、同job但不同Colour的关联记录 DISTINCT用于去重,避免同一Name被多次返回
内容的提问来源于stack exchange,提问作者Ace
相关产品推荐
相关产品推荐

