如何在SELECT结果中将由COUNT计算的一个值替换为另一个值?

时间:2019-05-30 10:42:08

标签: mysql sql sqlite

假设有两个表

shop        seller
------      -------
id          id
seller_id   seller_name
goods       sallary

seller_id可能会重复,来自Seller.id的部分可能根本不存在。因此,我需要获取包含saller_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

但是我得到了一组随机的数字和字母,而不是预期的数字,但没有。怎么做?

3 个答案:

答案 0 :(得分:1)

问题是'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()转换类型似乎对我有误导作用。

答案 1 :(得分:0)

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;

答案 2 :(得分:0)

您需要将查询更改为以下内容:

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