微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PostgreSQL , 案例时间

如何解决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

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

解决方法

如果您没有包含 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 表中的所有状态PLUSdata_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 举报,一经查实,本站将立刻删除。