2012-11-16 195 views
0

我無法嘗試獲取此查詢。通過計數和分組獲得此sql查詢權

說我有下列數據的表:

id | xyz  | code 
=========================== 
1  | 1  | ba 
2  | 1  | zz 
3  | 1  | ba 
1  | 1  | zz 
1  | 1  | ba 
2  | 1  | zz 

而且我想獲得「XYZ」的總和,通過ID例如分組

SELECT id, SUM(xyz) as mysum FROM table WHERE xyz=1 GROUP BY id 

我會最終的結果:

id | mysum 
================ 
1 | 3 
2 | 2 
3 | 1 

完美。

事情是,我實際上想要做的就是按'代碼'列進行分組,以便如果對於id:1,其中有2個條目代碼爲'ba',那麼結果會更像這樣:

id | mysum 
================ 
1 | 2 
2 | 1 
3 | 1 

這裏是我對mysql的有限理解失敗的地方。因爲我認爲做這樣的查詢:

SELECT id, SUM(xyz) AS mysum FROM table WHERE xyz=1 GROUP BY id, code 

但這顯然給出了結果,我以後不

我該如何做這樣的查詢,做SUM列xyz,而省略它,如果它已經添加了一個具有相同的'代碼'?

回答

2
SELECT id, 
     SUM(CASE WHEN code = 'ba' then 1 ELSE 0 END) 
FROM table1 
GROUP BY id 

後續問題:爲什麼ID = 2具有的值爲1,是不是爲零?

UPDATE 1

SELECT id, 
     count(Distinct code) 
FROM table1 
GROUP BY id 
+1

哇。我不知道你可以做這樣的事情!或者sqlfiddle存在。但是,當我不只是試圖確保'ba'在結果中不重複時,而是'代碼'列中的任何一個?我會更新我的問題來澄清這一點。 – willdanceforfun

+1

@cosmicbdog here http://sqlfiddle.com/#!2/ccf58/4 –

+0

你是高手!先生,祝你好運! – willdanceforfun

0
SELECT code,SUM(xyz) FROM table GROUP BY code,xyz