2014-01-22 38 views
3

取值的計數我有一個表在MySQL中使用值作爲給定值MySQL查詢到從整個表

+--------+---+---+---+---+----+ 
+ emp_no + A + B + C + D + E + 
+--------+---+---+---+---+----+ 
+ 100 + 1 + 0 + 2 + 1 + 1 + 
+ 101 + 2 + 1 + 1 + 3 + 1 + 
+ 102 + 3 + 4 + 4 + 2 + 5 + 
+ 103 + 5 + 3 + 4 + 1 + 2 + 
+--------+---+---+---+---+----+ 

是否有可能對我來說,寫一個SQL查詢,將獲取我的1總數,總數爲2,總數爲3 ....從上述表中獲得幫助。對此深表感謝。

謝謝

+0

這ASCII藝術是迷幻...注意短線如何似乎彎曲/曲線?還是我失去了它? – rvighne

+0

搜索SQL COUNT()函數。它可能有你所需要的。 – rvighne

+0

@rvi我認爲他需要計算列的變量表 –

回答

0

是的,但它有點複雜。這裏是一個方式,通過unpivoting值,然後聚集:

select val, count(*) 
from (select emp_no, 
      (case when n.n = 1 then A 
        when n.n = 2 then B 
        when n.n = 3 then C 
        when n.n = 4 then D 
        when n.n = 5 then E 
       end) as val 
     from table t cross join 
      (select 1 as n union all select 2 union all select 3 union all select 4 union all select 5 
      ) n 
    ) e; 
0

可能SUM()用的布爾條件總和。檢查了這一點:

SELECT 
    SUM(
     (`a` = 1) 
     + 
     (`b` = 1) 
     + 
     (`c` = 1) 
     + 
     (`d` = 1) 
     + 
     (`e` = 1) 
    ) as `1`, 
    SUM(
     (`a` = 2) 
     + 
     (`b` = 2) 
     + 
     (`c` = 2) 
     + 
     (`d` = 2) 
     + 
     (`e` = 2) 
    ) as `2`, 
    SUM(
     (`a` = 3) 
     + 
     (`b` = 3) 
     + 
     (`c` = 3) 
     + 
     (`d` = 3) 
     + 
     (`e` = 3) 
    ) as `3`, 
    SUM(
     (`a` = 4) 
     + 
     (`b` = 4) 
     + 
     (`c` = 4) 
     + 
     (`d` = 4) 
     + 
     (`e` = 4) 
    ) as `4`, 
    SUM(
     (`a` = 5) 
     + 
     (`b` = 5) 
     + 
     (`c` = 5) 
     + 
     (`d` = 5) 
     + 
     (`e` = 5) 
    ) as `5` 
FROM 
    `table`; 
3

試試這個:

SELECT num, SUM(counts) FROM (
SELECT A num, COUNT(A) counts FROM table1 GROUP BY A 
union all 
SELECT B num, COUNT(B) counts FROM table1 GROUP BY B 
union all 
SELECT C num, COUNT(C) counts FROM table1 GROUP BY C 
union all 
SELECT D num, COUNT(D) counts FROM table1 GROUP BY D 
union all 
SELECT E num, COUNT(E) counts FROM table1 GROUP BY E 
) temp 
GROUP BY num 
+0

它的工作見演示http://www.sqlfiddle.com/#!2/16a40/1 –