2016-03-02 57 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两者都是一样的。 :) –