首页 > 解决方案 > 如何将 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

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

标签: mysqlsqlsqlite

解决方案


问题是这'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()转换类型对我来说似乎是一种误导。


推荐阅读