0

我有疑问

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

如何显示所有状态数据,包括值为0或null的状态数据

4

2 回答 2

1

如果您没有包含所有可能值的表,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
于 2021-05-31T08:13:29.790 回答
1

如果您在表格中有可用的可能状态列表,您只需要加入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)
于 2021-05-31T08:21:49.237 回答