mysql - 如何将 COUNT 计算的一个值替换为 SELECT 结果中的另一个值?
问题描述
假设有两个表
shop seller
------ -------
id id
seller_id seller_name
goods sallary
Seller_id 可能会重复,来自 Seller.id 的部分可能根本不存在。所以,我需要得到由seller_name 组成的请求结果,并计算每个卖家的商店数量。我是这样做的
SELECT seller_name, COUNT(seller_id) AS shops FROM seller
LEFT JOIN shop ON seller.id = shop.seller_id GROUP BY seller_name.
它有效。但问题是我需要用文本“无”替换商店中的所有 0。我试图通过
REPLACE(COUNT(seller_id),0,"none")
与
CASE
WHEN COUNT(seller_id)=0 THEN "none"
ELSE COUNT(seller_id)
END
但我得到的不是预期的数字,而是随机的一组数字和字母。怎么做?
解决方案
问题是这'none'
是一个字符串,但值是一个计数。我强烈建议您坚持使用数字,但这不是您的问题。
您需要进行类型转换:
SELECT se.seller_name,
(CASE WHEN COUNT(s.seller_id) = 0
THEN 'none'
ELSE CAST(COUNT(s.seller_id) AS VARCHAR(255))
END) AS shops
FROM seller se LEFT JOIN
shop s
ON se.id = sh.seller_id
GROUP BY se.seller_name;
在 MySQL 中,使用CAST(COUNT(s.seller_id) AS CHAR)
. 或者几乎所有数据库都支持CONCAT(COUNT(s.seller_id), '')
,但使用CONCAT()
转换类型对我来说似乎是一种误导。
推荐阅读
- mysql - : 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在“app”附近使用的正确语法)
- javascript - 如何使用 pk 从 django 获取 url 到 javascript
- python - 计算多边形中的点并将结果写入 (Geo)Dataframe
- measurement - 使用压缩传感的荧光光谱测量?
- kubernetes - 如何在 Homelab 中将共享驱动器用作多个 Kubernetes PV
- abap - SAP ABAP CDS 查看/DCL 检查授权
- mysql - 当文本未正确存储并存储在其他字符集中时如何转换整个 MySQL 数据库
- ios - UIScrollView 上的跳跃键盘被解雇
- spring - 如何在春季启动中使用条件接口与列表中的值
- wifi - ISP 是否注意到对您的 wifi 网络/路由器的暴力攻击?