2014-12-06 92 views
-1

我有這樣一個表:查找列值至少出現兩次的行嗎?

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; 
+0

你的意思是大於或者至少是2?因爲哈利只有兩種情況。 – AdamMc331 2014-12-06 18:00:53

+1

對不起,我的英文不好,我的意思是至少2 – chanjianyi 2014-12-06 18:03:15

+0

爲什麼不提供更具代表性的例子? – Strawberry 2014-12-06 23:32:40

回答

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; 
+0

是。這是我輸入sql時的錯誤。但是這個結果與我想要的不符。 – chanjianyi 2014-12-06 17:40:23

+0

我想不僅顯示1個記錄計數名稱> 1。我想看看他們全部。 – chanjianyi 2014-12-06 17:43:02

+0

@chanjianyi。 。 。這是第二個查詢所做的。 – 2014-12-06 17:43:50

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的例子。

相關問題