2014-09-02 54 views
1

示例表:集團通過與多個有在同一領域

a | b 
----- 
1 | 1 
1 | 2 
2 | 1 
3 | 0 
3 | 1 
4 | 1 
4 | 2 
4 | 3 
5 | 0 

我想獲得列a,這是與值從列b,其中b = 1 AND b = 2相關的所有DISTINCT值。

結果應該是:

a 
- 
1 
4 

是否與GROUP BY這項工作?我嘗試以下SQL,但它給始終爲0的結果:

SELECT t.a 
FROM table t 
GROUP BY t.a, t.b 
HAVING t.b = 1 AND t.b = 2 

的MySQL似乎需要在同一行,而不是在分組bAND聲明。

任何想法? :)

回答

2

你非常接近。試試這個:

SELECT t.a 
FROM table t 
GROUP BY t.a 
HAVING SUM(t.b = 1) > 0 AND SUM(t.b = 2) > 0; 

SUM()條件計算中條件正確的行數。你想要兩個,因此> 0AND

編輯從做如下的GROUP BY

+0

呀。有時候你會錯過樹林......謝謝。 **編輯**你必須從'GROUP BY'中刪除't.b'。事後我會接受這個。 – 2014-09-02 18:11:02

1

一種方法去除t.b

SELECT t.a 
FROM table t 
GROUP BY t.a 
HAVING SUM(CASE WHEN b=1 THEN 1 ELSE 0 END) <> 0 
    AND SUM(CASE WHEN b=2 THEN 1 ELSE 0 END) <> 0 

請注意,您需要刪除從GROUP BYt.b,否則結果將是不正確的。

Demo.

1

這應該做的伎倆:

SELECT t.a 
FROM table t 
WHERE (t.b = 1 OR t.b = 2) 
GROUP BY t.a 
HAVING COUNT(t.a) > 1 
+0

這也適用。謝謝:) – 2014-09-02 18:16:21

+0

請注意,該查詢只在假設表中沒有重複的'(a,b)'元組的假設下工作。例如,如果向OP的表中添加一個重複的「(2,1)」記錄,則會在輸出中添加「2」([demo](http://www.sqlfiddle.com/#!2/) 2分之22535))。 – dasblinkenlight 2014-09-02 18:21:20

+0

好點!所以這個答案只適用於具有'UNIQUE(a,b)'約束的數據集,對於這個問題沒關係,但應該提到。 – 2014-09-02 20:43:53

0

您可以簡單地使用子查詢是這樣的:

select a from t where b=1 and a in (select a from t where b=2);