如何解决PostgreSQL , 案例时间
我有疑问
select case
when (status = 'MENANG' is null ) then '0'
when (status = 'KALAH' is null) then '0'
when (status = 'PROSES' is null) then '0'
when (status = 'BATAL' is null) then '0'
when (status = 'MUNDUR' is null) then '0'
else status
end as data_status,count(a.kode_barang) as total
from tbl barang
group by status
这里我有一个查询和一些状态, 这里我用count根据状态计算物品的数量
运行时,
data_status | jumlah (count)
KALAH 2
kosong 4
MENANG 2
PROSES 11
解决方法
如果您没有包含 status
的所有可能值的表,您可以使用 VALUES
列表和 LEFT JOIN:
select v.status,count(b.status) as total
from (
values ('MENANG','KALAH','PROSES','BATAL','MUNDUR')
) as v(status)
left join barang b on b.status = v.status
group by v.status
,
如果您在表格中有可用状态的列表,您只需要加入 LEFT OUTER JOIN
如果您的 list_of_status
表是:
create table list_of_status (status varchar);
insert into list_of_status values('MENANG');
insert into list_of_status values('KALAH');
insert into list_of_status values('PROSES');
insert into list_of_status values('BATAL');
insert into list_of_status values('MUNDUR');
而您的 data_status
是
create table data_status (status varchar,kode_barang int);
insert into data_status values ('MENANG',3);
insert into data_status values ('KALAH',2);
insert into data_status values ('PROSES',3);
insert into data_status values ('MENANG',3);
SELECT
list_of_status.STATUS,count(kode_barang) as total
FROM list_of_status LEFT OUTER JOIN data_status ON list_of_status.STATUS= data_status.STATUS
group by list_of_status.STATUS
预期结果
status | total
--------+-------
KALAH | 1
BATAL | 0
MENANG | 2
PROSES | 1
MUNDUR | 0
(5 rows)
如果您想要 list_of_status
表中的所有状态PLUS,data_status
中存在的任何其他状态,您可以使用 FULL_OUTER_JOIN
来实现。 >
例如如果我们在 data_status
中包含一行 TEST
状态在 list_of_status
中不可用
insert into data_status values ('TEST',5);
以下查询返回所需的结果,包括 TEST
行
select
COALESCE(list_of_status.STATUS,data_status.STATUS) STATUS,count(kode_barang) as total
FROM list_of_status FULL OUTER JOIN data_status ON list_of_status.STATUS= data_status.STATUS
group by COALESCE(list_of_status.STATUS,data_status.STATUS)
结果:
status | total
--------+-------
TEST | 1
MUNDUR | 0
MENANG | 2
PROSES | 1
KALAH | 1
BATAL | 0
(6 rows)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。