筛选重复项后选择具有唯一值的行
问题描述:
我试图获取仅由唯一个人使用的颜色。使用下面的示例数据:筛选重复项后选择具有唯一值的行
+---------+-------------+
| color | name |
+---------+-------------+
| red | Jane |
| red | Jane |
| red | Bob |
| blue | David |
| blue | Bill |
| green | Jack |
| green | Jack |
| purple | Jack |
| orange | Dan |
+---------+-------------+
我得到
选择颜色,名称 去掉重复的FROM表 GROUP BY颜色,名称;
+---------+-------------+
| color | name |
+---------+-------------+
| red | Jane |
| red | Bob |
| blue | David |
| blue | Bill |
| green | Jack |
| purple | Jack |
| orange | Dan |
+---------+-------------+
什么我需要做进一步筛选下来到我期望的结果集绿色,紫色,橙色的,只是因为只有一个人与该颜色相关联?
答
您可以通过在查询中进一步做到这一点。把你有的作为一个子查询,然后用它作为第二个子查询的来源,来计算每种颜色显示的不同名称的数量。然后,它将成为唯一名称数量为1的结果集中的一个选择。
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
+0
它的工作原理是,在向子查询添加别名后,它返回了正确的颜色,但我在哪里添加了与该颜色对应的名称列? –
+0
对颜色使用原始查询的INNER JOIN'选择颜色,名称FROM表GROUP BY颜色,名称'。这将仅为最终列表中的颜色生成单个名称记录。 – SandPiper
我无法理解您的状况。 “你不想与其他颜色分享不同名称的颜色”是什么意思?为什么包含“orange”? –
你的意思是具有完全不同名称的颜色吗? –
@DavyM:是的,对于混乱感到抱歉。我试图想出一个非常具体的方式来描述它。我自从对这个问题进行了编辑。 –