我有一个有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;不会这样做。)
答案 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
等于false
,0
等于{{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;