如何计算表中的特定值

时间:2010-10-12 08:46:45

标签: sql mysql

我有一个有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

这样做的最佳方法是什么? (注意,我需要将这些值转移到列, 一个简单的选择a,b,count(*)来自mytable,其中b = 1或b = 2 group by a,b;不会这样做。)

3 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:0)

首先,你误解了IFNULL函数(你可能想要IF)。请参阅文档http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html

您在问题中的第二个查询将为您提供所需内容。但SUM(a=x)绰绰有余。在MySQL true中,1等于false0等于{{1}}。

答案 2 :(得分: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;