2013-03-21 56 views
5

我環顧四周,但找不到答案 我需要一個查詢返回2組值作爲在同一領域mysql的多計和組值

例如基於值字段名我有一個表

NAME, VALUE 
name1, 2 
name1, 2 
name1, 3 
name1, 4 
name2, 2 
name2, 2 
name2, 3 
name2, 4

現在我想計數和組中的另一組值2和3的一組和值4,所以我的結果是這樣的

NAME, GRP1_COUNT, GRP2_COUNT 
name1, 3, 1 
name2, 3, 1

我試過JOINUNION沒有多少運氣 任何幫助表示讚賞

+0

搜索 「MySQL的行列」 和「MySQL的樞軸」 – Kermit 2013-03-21 20:08:00

回答

5

試試這個

SELECT 
name, 
sum(case when value=2 or value=3 then 1 else 0 end), 
sum(case when value=4 then 1 else 0 end) 
FROM YourTable 
GROUP BY name 
+1

@GordonLinoff當發表一個代碼只有答案時不那麼難做。這並不是說這個答案不值得讚揚,但是這個比較是不公平的。 – Lamak 2013-03-21 20:19:21

+0

@Lamak。 。 。當我寫這個評論時,兩個答案都只有代碼。另一個答案已經被修改並且在解釋方面有了很大的改進(藍色通常就是這樣)。 – 2013-03-21 20:21:41

+2

我很高興我在這個網站(或任何這樣的網站)上有史以來的第一個答案與專家擁有完全相同的代碼! – 2013-03-21 20:26:50

14

MySQL沒有一個支點功能,所以你必須使用聚合函數與轉換數據CASE表達。對於這種類型的計算,您將可使用COUNTSUM

select name, 
    sum(case when value in (2,3) then 1 else 0 end) GRP1_COUNT, 
    sum(case when value = 4 then 1 else 0 end) GRP2_COUNT 
from yourtable 
group by name 

SQL Fiddle with Demo

COUNT版本:

select name, 
    count(case when value in (2,3) then VALUE end) GRP1_COUNT, 
    count(case when value = 4 then VALUE end) GRP2_COUNT 
from yourtable 
group by name 

SQL Fiddle with Demo

+0

有沒有更好的方法?不包括硬性價值。 – Deckard 2014-02-18 01:30:42

+0

@Deckard是的,你可以使用預處理語句來執行動態sql – Taryn 2014-02-18 01:44:57