2013-12-09 48 views
1

我有一個包含5列的MySQL表來存儲各種值。對於表中的每個記錄,5列存儲單個值(大約15)中的一個。這裏有一個結構的例子:在MYSQL中的多個列中選擇SUM(DISTINCT值)

| COL1 | COL2 | COL3 | COL4 | COL5 | 
|------|------|------|-------|-------| 
| val1 | val3 | val8 | val11 | val14 | 
| val2 | val3 | val5 | val9 | val12 | 
| val1 | val2 | val6 | val14 | val15 | 
| val3 | val5 | val9 | val10 | val12 | 
| val2 | val4 | val7 | val11 | val14 | 

我想創建一個查詢,對這5列中的每一列的唯一值進行求和。結果應顯示5列中存在的總次數val1,val2,val3等。

理想的結果將可以構成爲:預先的幫助

val | total 
_____________________ 

val1 | 34 

val2 | 12 

val3 | 23 

val4 | 14 

val5 | 21 

etc | etc 

謝謝,非常感謝。

+0

添加一些樣本數據,你怎麼有這麼遠嗎? –

回答

4

方式一:SQL Fiddle

SELECT val, 
     COUNT(*) AS total 
FROM (SELECT Col1 AS Val 
     FROM YourTable 
     UNION ALL 
     SELECT Col2 AS Val 
     FROM YourTable 
     UNION ALL 
     SELECT Col3 AS Val 
     FROM YourTable 
     UNION ALL 
     SELECT Col4 AS Val 
     FROM YourTable 
     UNION ALL 
     SELECT Col5 AS Val 
     FROM YourTable) AS T 
GROUP BY val 

或者另:SQL Fiddle

SELECT CASE N 
     WHEN 1 THEN Col1 
     WHEN 2 THEN Col2 
     WHEN 3 THEN Col3 
     WHEN 4 THEN Col4 
     WHEN 5 THEN Col5 
     END AS Val, 
     COUNT(*) AS total 
FROM YourTable 
     CROSS JOIN (SELECT 1 AS N 
        UNION ALL 
        SELECT 2 
        UNION ALL 
        SELECT 3 
        UNION ALL 
        SELECT 4 
        UNION ALL 
        SELECT 5) AS T 
GROUP BY Val 
+0

偉大的工作!第一個解決方案完美運作。謝謝您的幫助。 –