如果您在表格中有可用的可能状态列表,您只需要加入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表中存在的任何其他状态,data_status您可以使用FULL_OUTER_JOIN.
例如,如果我们在data_status一行中包含TESTstatus not available in list_of_statuswith
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)