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

Sat*_*h S 7 postgresql null group-by

我有一张表,其中包含销售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
Run Code Online (Sandbox Code Playgroud)

我想显示每个prodTypeCode选项的总量.如果prodTypeCode为null,则应显示Missing.

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

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

Boh*_*ian 18

问题是数据类型不匹配; 'Missing'是文本,但产品类型代码是数字.

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

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

请参见SQLFiddle.

或者,更简单:

select coalesce(prodTypeCode::varchar(40), 'Missing') ProductCode, SUM(amount)
from sales
group by prodTypeCode
Run Code Online (Sandbox Code Playgroud)

请参见SQLFiddle.


Gor*_*off 7

也许你有一个类型不匹配:

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

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


pre*_*bug 5

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

SELECT 
COALESCE(NULLIF(prodTypeCode,''), 'Missing') AS ProductCode,        
SUM(amount)
From sales s
group by prodTypeCode;
Run Code Online (Sandbox Code Playgroud)