postgres 中空值的选择查询中的默认值

问题描述 投票:0回答:3

我有一张包含销售 ID、产品代码和金额的表。有些地方产品代码为空。我想显示 Missing 而不是 null。下面是我的桌子。

salesId     prodTypeCode    amount
1           123              150
2           123              200
3           234             3000
4           234              400
5           234              500
6           123              200
7           111              40
8           111              500
9                           1000
10          123              100

我想显示每个

prodTypeCode
的总金额,并选择如果 prodTypeCode 为空,则应显示 Missing

select (CASE WHEN prodTypeCode IS NULL THEN
   'Missing'
    ELSE
    prodTypeCode
    END) as ProductCode, SUM(amount) From sales group by prodTypeCode

以上查询给出错误。请建议我克服这个问题。我创建了一个 SQLFIDDLE

postgresql null group-by
3个回答
45
投票

问题是数据类型不匹配;

'Missing'
是文本,但产品类型代码是数字。

将产品类型代码转换为文本,以便两个值兼容:

select (CASE WHEN prodTypeCode IS NULL THEN
   'Missing'
    ELSE
    prodTypeCode::varchar(40)
    END) as ProductCode, SUM(amount) From sales group by prodTypeCode

参见 SQLFiddle

或者更简单:

select coalesce(prodTypeCode::varchar(40), 'Missing') ProductCode, SUM(amount)
from sales
group by prodTypeCode

参见 SQLFiddle


10
投票

也许您的类型不匹配:

select coalesce(cast(prodTypeCode as varchar(255)), 'Missing') as ProductCode,     
       SUM(amount)
From sales s
group by prodTypeCode;

比起

coalesce()
,我更喜欢
case
,只是因为它更短。


5
投票

我尝试了这两个答案,但就我而言,这两个答案都不起作用。最终有帮助的是:

SELECT 
COALESCE(NULLIF(prodTypeCode,''), 'Missing') AS ProductCode,        
SUM(amount)
From sales s
group by prodTypeCode;
© www.soinside.com 2019 - 2024. All rights reserved.