【发布时间】:2010-10-12 08:46:44
【问题描述】:
我有一列有 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
这样做的最佳方法是什么? (注意,我需要将这些值转换为列, 一个简单的 select a,b,count(*) from mytable where b=1 or b=2 group by a,b;不会的。)
【问题讨论】:
-
如果您需要将它们放在单独的列中,您的查询似乎会尽可能有效。
-
IFNULL(expr, NULL)毫无意义。它总是等价于expr。 -
同样
CASE WHEN a = 1 THEN 1 ELSE 0等价于a = 1。 -
@Anonym,
SUM(CASE... 构造应该只需要一个)。 -
@Mark Bannister,
NULLIF(b!=1,NULL)没有意义