2010-10-12 117 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 

- 因为它是既简单,(我认为)更容易理解,因此维护。我建议包括列别名,因为他们使输出更容易理解。

相关问题