2010-10-12 112 views
0

我有一列有15個不同的值。我想重新計算其中有幾個的數量, 我想出了例如如何計算表中的特定值

select a,COUNT(IFNULL(b != 1,NULL)),COUNT(IFNULL(b != 2,NULL)) from 
    mytable group by a 

select a,SUM(CASE WHEN a = 1 THEN 1 ELSE 0)),SUM(CASE WHEN a = 2 THEN 1 ELSE 0)) from 
    mytable group by a 

這樣做的最好方法是什麼? (注意,我需要將這些值轉換爲列, 簡單地從mytable中選擇a,b,count(*),其中b = 1或b = 2 group by a,b;不會這樣做。)

+1

如果您在單獨的列中需要它們,那麼您的查詢看起來效果與它將得到的一樣有效。 – Wrikken 2010-10-12 08:55:07

+0

'IFNULL(expr,NULL)'是毫無意義的。它總是等同於'expr'。 – 2010-10-12 08:57:24

+0

另外'CASE當a = 1則1 ELSE 0'相當於'a = 1'。 – 2010-10-12 08:58:39

回答

0

你有沒有嘗試交叉連接?

select * 
    from (
     select a, sum(...) as aSum 
      from mytable 
     where a... 
     group 
      by a 
     ) as forA 
     cross join (
        select b, sum(...) as bsum 
        from (
          select * 
          from mytable 
          where b... 
          group 
           by b 
         ) 
       ) as forB; 
1

中的問題提出了兩種方法,我建議第二:

select a, 
     SUM(CASE WHEN b = 1 THEN 1 ELSE 0) b1, 
     SUM(CASE WHEN b = 2 THEN 1 ELSE 0) b2 
from mytable 
group by a 

- 因爲它是既簡單,(我認爲)更容易理解,因此維護。我建議包括列別名,因爲他們使輸出更容易理解。

相關問題