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。