postgres中null值的select查询中的默认值

时间:2016-03-04 04:16:40

标签: postgresql null group-by

我有一张包含销售ID,产品代码和金额的表格。有些地方的产品代码为空。我想显示缺少而不是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为null,则应显示缺失

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

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

3 个答案:

答案 0 :(得分:12)

问题是数据类型不匹配; '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

答案 1 :(得分:3)

也许您的类型不匹配:

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

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

答案 2 :(得分:1)

我尝试了所有2个答案,但都没有用。我希望此代码段可以对其他人都不起作用:

SELECT 
COALESCE(NULLIF(prodTypeCode,''), 'Missing') AS ProductCode,        
SUM(amount)
From sales s
group by prodTypeCode;