Mysql 如何在选择结果中将计数计算的一个值替换为另一个值?
假设有两张桌子Mysql 如何在选择结果中将计数计算的一个值替换为另一个值?,mysql,sql,sqlite,Mysql,Sql,Sqlite,假设有两张桌子 shop seller ------ ------- id id seller_id seller_name goods sallary 卖方id可能重复,卖方id的零件可能根本不存在。因此,我需要得到请求的结果,包括saller_名称和每个卖家的店铺数量。我是这样做的 SELECT seller_name, COUNT(seller_id) AS shops FROM seller LEFT JOIN shop ON
shop seller
------ -------
id id
seller_id seller_name
goods sallary
卖方id可能重复,卖方id的零件可能根本不存在。因此,我需要得到请求的结果,包括saller_名称和每个卖家的店铺数量。我是这样做的
SELECT seller_name, COUNT(seller_id) AS shops FROM seller
LEFT JOIN shop ON seller.id = shop.seller_id GROUP BY seller_name.
它是有效的。但问题是,我需要用文本“none”替换商店中的所有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\u id)作为CHAR)
。或者几乎任何数据库都支持CONCAT(COUNT(s.seller\u id),“”)
,但使用CONCAT()
转换类型对我来说似乎有误导性
Point 1: REPLACE(COUNT(seller_id),0,"none") --It will replace all zero's with 'none'.
就像您的计数是10一样,它将在输出中返回1none
Point 2: CASE WHEN COUNT(seller_id)=0 THEN "none" ELSE COUNT(seller_id) END--It will gives you conversion failed error.
因此,您需要在varchar中转换计数,如下所示
SELECT se.seller_name,
(CASE WHEN COUNT(s.seller_id) = 0
THEN 'none'
ELSE CAST(COUNT(s.seller_id) AS VARCHAR(10))
END) AS shops
FROM seller se LEFT JOIN
shop s
ON se.id = sh.seller_id
GROUP BY se.seller_name;
您需要将您的查询更改为以下内容:
SELECT seller_name,
CASE
WHEN COUNT(shop.Id)=0 THEN 'none'
ELSE CAST(COUNT(shop.Id) as NVARCHAR(10))
END AS shops FROM seller
LEFT JOIN shop ON seller.id = shop.seller_id GROUP BY seller_name
ELSE CAST(计数(s.seller_id)为VARCHAR(255))时出错。@Kaama。这是有效的SQL语法,尽管某些数据库可能有一些变化。您仍然没有为正在使用的数据库的问题添加标记。我的问题。我正在使用SQLFiddle来测试这段代码,如果我没记错的话,他也会使用MySQL和SQLite。