2013-10-23 52 views
0

使用MySQL。我有一個表,看起來像這樣:選擇MySQL中多個字段的值出現次數

rawID | a1a | a1b | a2a | a2b | a2c | ... 
    1 | 2 | 0 | 0 | 0 | 2 | ... 
    2 | 2 | 2 | 0 | 0 | 0 | ... 
    3 | 0 | 1 | 1 | 1 | 2 | ... 
    4 | 2 | 1 | 2 | 1 | 2 | ... 

*爲字段的可能值在一個單獨的「響應」表和預定義的範圍從0-2。

我想要一個結果,讓我每個字段的每個值的出現。我已經看到類似的問題,但只處理一個領域。

我想我的結果是這樣的:

response | a1a | a1b | a2a | a2b | a2c | ... 
     0  | 1 | 1 | 2 | 2 | 1 | ... 
     1  | 0 | 2 | 1 | 2 | 0 | ... 
     2  | 3 | 1 | 1 | 0 | 3 | ... 

此表有次,每次值(「迴應」)的數量發生了每個字段。

謝謝你們,

+0

您是否有明確的列表或可能的響應(0,1,2)在哪裏定義?否則,我們需要一個'SELECT 0 UNION SELECT 1 UNION SELECT 2'來啓動它,或者更糟的是:如果它可能發生變化,並且我們應該列出動態值,那麼我們必須從'SELECT DISTINCT a1a FROM表UNION SELECT DISTINCT a1b ......'等 – Wrikken

+0

這不是一個編程問題。它似乎並沒有表現出你自己解決問題的最小努力。如果您需要解決這些問題,請聘請顧問或程序員。這不是救世軍。 – mwhs

+0

@Wrikken - 是的,可能的答案是在一個單獨的表中定義 – thequeue

回答

1

嘗試了這一點:

SELECT 
    response, 
    sum(a1a = response) a1aCount, 
    sum(a1b = response) a1bCount, 
    sum(a2a = response) a2aCount, 
    sum(a2b = response) a2bCount, 
    sum(a2c = response) a2cCount 
FROM t, r 
GROUP BY response 

輸出:

| RESPONSE | A1ACOUNT | A1BCOUNT | A2ACOUNT | A2BCOUNT | A2CCOUNT | 
|----------|----------|----------|----------|----------|----------| 
|  0 |  1 |  1 |  2 |  2 |  1 | 
|  1 |  0 |  2 |  1 |  2 |  0 | 
|  2 |  3 |  1 |  1 |  0 |  3 | 

F iddle here

無論response表中的項目數量如何,這都可以工作。

+1

美麗。完美的作品。謝謝一堆! – thequeue

0

我想這應該作品(我們假設你的表名是 「答覆」):

SELECT 0 as response, SUM(r.a1a = 0) as a1a, SUM(r.a1b = 0) as a1b, 
SUM(r.a2a = 0) as a2a, SUM(r.a2b = 0) as a2b FROM responses r 
UNION 
SELECT 1 as response, SUM(r.a1a = 1) as a1a, SUM(r.a1b = 1) as a1b, 
SUM(r.a2a = 1) as a2a, SUM(r.a2b = 1) as a2b FROM responses r 
UNION 
SELECT 2 as response, SUM(r.a1a = 2) as a1a, SUM(r.a1b = 2) as a1b,  
SUM(r.a2a = 2) as a2a, SUM(r.a2b = 2) as a2b FROM responses r