在我下面的查询中,最后一列返回实例的计数,对于这个计数为0的实例,我想用'N/A‘替换它们?
此查询似乎不起作用
select m.id, m.desc, count(IF(i.id is NULL,'N/A',i.id)) as quant from menu m left join items i on m.id = i.id group by m.id order by m.id;
上面的查询输出如下
============================ m.id |c.desc | qaunt ============================ 1234 | Shoes | 1 1235 | Socks | 2 1236 | Clothes | 0 ===========================
预期结果:
============================ m.id |m.desc | qaunt ============================ 1234 | Shoes | 1 1235 | Socks | 2 1236 | Clothes | N/A ===========================
你能建议我上面查询的变化吗?
发布于 2012-11-02 05:13:49
(这是经过测试的)您的查询正在计算if的结果,我认为您希望得到相反的结果。我使用IFNULL和NULLIF的组合,它们一起表示“如果计数为零,则将其转换为NULL。如果为NULL,则对此列使用"N/A”。
select m.id, m.desc, IFNULL(NULLIF(count(i.id), 0), "N/A") as quant from menu m left join items i on m.id = i.id group by m.id order by m.id;
对于mysql,您可以通过cast()确保列始终是一个字符串:
IFNULL(NULLIF(CAST(count(i.id) AS char), "0"), "N/A") as quant
这样做的好处是只需要计数一次,并且不需要子查询。
发布于 2012-11-02 05:11:58
你能试一下吗?
select m.id, m.desc, if(count(i.id) = 0,'N/A',count(i.id))) as quant from menu m left join items i on m.id = i.id