过滤重复项后选择具有唯一值的行

时间:2017-08-09 01:28:47

标签: mysql sql group-by aggregate-functions

我正在努力获得仅由唯一个人使用的颜色。使用以下示例数据:

+---------+-------------+
| color   | name        | 
+---------+-------------+
| red     | Jane        | 
| red     | Jane        | 
| red     | Bob         | 
| blue    | David       | 
| blue    | Bill        | 
| green   | Jack        | 
| green   | Jack        | 
| purple  | Jack        | 
| orange  | Dan         | 
+---------+-------------+

我用

删除了重复项

选择颜色,名称 从表 GROUP BY颜色,名称;

+---------+-------------+
| color   | name        | 
+---------+-------------+
| red     | Jane        | 
| red     | Bob         | 
| blue    | David       | 
| blue    | Bill        | 
| green   | Jack        | 
| purple  | Jack        | 
| orange  | Dan         |
+---------+-------------+

我需要做什么才能将其进一步过滤到我想要的绿色,紫色和橙色结果集,因为只有一个人与该颜色相关联?

1 个答案:

答案 0 :(得分:2)

您可以通过在查询中更进一步来完成此操作。将您拥有的内容作为子查询,然后将其用作第二个子查询的源,该子查询计算为每种颜色显示的不同名称的数量。然后,它只是从结果集中选择,其中唯一名称的数量是一。

SELECT color
FROM (SELECT color, COUNT(name) namecount FROM (SELECT color, name 
          FROM table GROUP BY color, name) t1
      GROUP BY color) t2
WHERE namecount = 1