查找列值至少出现两次的行?

时间:2014-12-06 17:34:45

标签: mysql sql group-by

我有一张这样的表:

ID NAME  CASE_ID
1  John  33   
2  Harry 33
3  James 55
4  John  55
5  John  44
6  Harry 66

我想找到至少有两个案例的人:

ID NAME  CASE_ID
1  John  33   
4  John  55
5  John  44
6  Harry 66
2  Harry 33

我试过这个,但它不起作用:

SELECT name, case_id
FROM t
GROUP BY case_id
HAVING COUNT(name) > 1;

2 个答案:

答案 0 :(得分:2)

您在select中缺少逗号,这会更改查询的含义:

select name, case_id
from t
group by case_id
having count(name) > 1;

您的原始查询将name列重命名为case_id,这不是您的意图。

如果您想要原始数据,请将表格join改为:

select t.*
from t join
     (select name, count(distinct case_id)
      from t
      group by name
      having count(distinct case_id) > 1
     ) nc
     on t.name = nc.name;

答案 1 :(得分:1)

您需要一个子查询来完成此任务。我首先编写一个子查询,该子查询获取两个或更多不同情况下的人的姓名:

SELECT name
FROM myTable
GROUP BY name
HAVING COUNT(distinct case_id) >= 2;

您可以将此与原始表格连接,条件是名称匹配以获取所有这些人:

SELECT m.*
FROM myTable m
JOIN(
  SELECT name
  FROM myTable
  GROUP BY name
  HAVING COUNT(distinct case_id) >= 2) t ON t.name = m.name;

这将给出您想要的结果。它们是无序的,但我认为如果需要,可以添加它。

以下是SQL Fiddle示例。