首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否在mysql中将count 0替换为“N/A”?

是否在mysql中将count 0替换为“N/A”?
EN

Stack Overflow用户
提问于 2012-11-02 05:03:28
回答 4查看 3K关注 0票数 1

在我下面的查询中,最后一列返回实例的计数,对于这个计数为0的实例,我想用'N/A‘替换它们?

此查询似乎不起作用

代码语言:javascript
运行
复制
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;

上面的查询输出如下

代码语言:javascript
运行
复制
============================
m.id     |c.desc     | qaunt
============================
1234     | Shoes     | 1
1235     | Socks     | 2
1236     | Clothes   | 0
===========================

预期结果:

代码语言:javascript
运行
复制
============================
m.id     |m.desc     | qaunt
============================
1234     | Shoes     | 1
1235     | Socks     | 2
1236     | Clothes   | N/A
===========================

你能建议我上面查询的变化吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-11-02 05:13:49

(这是经过测试的)您的查询正在计算if的结果,我认为您希望得到相反的结果。我使用IFNULL和NULLIF的组合,它们一起表示“如果计数为零,则将其转换为NULL。如果为NULL,则对此列使用"N/A”。

代码语言:javascript
运行
复制
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()确保列始终是一个字符串:

代码语言:javascript
运行
复制
IFNULL(NULLIF(CAST(count(i.id) AS char), "0"), "N/A") as quant

这样做的好处是只需要计数一次,并且不需要子查询。

票数 3
EN

Stack Overflow用户

发布于 2012-11-02 05:11:58

你能试一下吗?

代码语言:javascript
运行
复制
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
group by m.id
order by m.id;
票数 2
EN

Stack Overflow用户

发布于 2012-11-02 05:15:08

NULL和0不相同

代码语言:javascript
运行
复制
select m.id, m.desc, count(IF(i.id = 0,'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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13185433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档