2016-03-02 74 views
1

我有這樣盤點記錄

 id | block1 | block2 | block3 
----------------------------------------------- 
    1 | John | John | 
    2 | Mark |   | 
    3 |   | Frank | Frank 

我怎麼算約翰·馬克和弗蘭克多少是在表的表? ES。

John - 2 
Mark - 1 
Frank - 2 

我使用下面的查詢,但只爲一列,我不知道如何有相同的結果所有的列。我認爲這是一個有益的查詢becouse我讀的是可能有結果,也許在過去的一個月或一年

SELECT block1, 
COUNT(*) AS total 
FROM table 
GROUP BY block1 
ORDER BY total DESC; 

謝謝 (對不起,我的英語)

回答

1

您可以使用UNION ALL到UNPIVOT表,然後應用分組:

SELECT block, COUNT(*) AS 'total' 
FROM (
    SELECT block1 AS block 
    FROM mytable  

    UNION ALL 

    SELECT block2 
    FROM mytable  

    UNION ALL 

    SELECT block3 
    FROM mytable) AS t 
GROUP BY block 
+0

非常感謝你!幫助我你幫助我很多。爲我完美工作 – gege

+0

@gege很高興我能夠幫助並歡迎Stack Overflow。如果它幫助你解決你的問題,請將它標記爲或接受任何其他答案。 –

0

分別選擇列並使用UNION合併它們。然後COUNT他們。你可以試試這個 -

SELECT col_block, COUNT(col_block) FROM (
(SELECT block1 col_block, 
FROM table) 
UNION ALL 
(SELECT block2 col_block, 
FROM table) 
UNION ALL 
(SELECT block3 col_block, 
FROM table)) tbl 
GROUP BY col_block 
+0

無論如何,我使用來自Georgos Betsos的查詢帖 – gege

+0

@gege兩者都是一樣的。 :) –