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.
也许你有一个类型不匹配:
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,只是因为它是短。
我尝试了这两个答案,但就我而言,这两个答案都不起作用。最终有帮助的是:
SELECT
COALESCE(NULLIF(prodTypeCode,''), 'Missing') AS ProductCode,
SUM(amount)
From sales s
group by prodTypeCode;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13929 次 |
| 最近记录: |