加入sql查询来分析值

时间:2011-09-21 11:36:03

标签: sql join

我有一个包含三列的表entriesid, name, display_name 我需要用join编写一个查询,它将检查每个名称的display_names数量,并只显示那些具有多个display_names的名称。
用连接写这个应该相当简单。在我使用下一个查询之前:

SELECT e1.name 
FROM entries e1 
WHERE (
  SELECT COUNT(DISTINCT e2.display_name) 
  FROM entries e2 
  WHERE e2.name = r1.name
) > 1;

3 个答案:

答案 0 :(得分:5)

您不需要加入。

SELECT e1.name 
FROM entries e1 
GROUP BY e1.name
HAVING COUNT(*) > 1

请注意,您可以在having子句中使用别名,因此从@ Scorpi0和@Widor借用也可以:

SELECT e1.name, COUNT(DISTINCT e1.display_name) as occurrences
FROM entries e1 
GROUP BY e1.name
HAVING occurrences > 1

允许这样做的原因是在完成select中的所有其他内容后评估having。到那时,别名的内容将是已知的 您不能在WHERE子句中使用此别名,因为在之前运行(或可能运行) MySQL知道别名中的内容。

答案 1 :(得分:3)

您不需要联接,HAVING子句可以为您执行过滤:

SELECT e1.name 
FROM entries e1 
GROUP BY e1.name
HAVING COUNT(DISTINCT e1.display_name) > 1

答案 2 :(得分:1)

SELECT name, COUNT(display_name)
FROM entries
GROUP BY name
HAVING COUNT(display_name) > 1