在Postgresql上使用group by进行计数
我有一个postgresql类型和一个表 创建类型mem_status为枚举'waiting'、'active'、'expired'; 创建表格mems id BIGSERIAL主键, 状态mem_状态不为空 ; 数据集 在memsid中插入状态值 1“有效”,2“有效”,3“过期”; 我想查询按状态分组的计数。因此,我在下面的查询中添加了treid mem_状态为 选择unnestenum_rangeNULL::mem_status作为状态 选择m.status,count1 从mems m 右键连接mem_status ms ON ms.status=m.status 按m.status分组; 但如果没有等待的mems,结果如下所示在Postgresql上使用group by进行计数,postgresql,aggregate-functions,Postgresql,Aggregate Functions,我有一个postgresql类型和一个表 创建类型mem_status为枚举'waiting'、'active'、'expired'; 创建表格mems id BIGSERIAL主键, 状态mem_状态不为空 ; 数据集 在memsid中插入状态值 1“有效”,2“有效”,3“过期”; 我想查询按状态分组的计数。因此,我在下面的查询中添加了treid mem_状态为 选择unnestenum_rangeNULL::mem_status作为状态 选择m.status,count1 从mems m
status | count
================
NULL | 1 <- problem
'active' | 2
'expired' | 1
我如何才能做到这一点?使用countid:
或:
每一个表达式给出
表达式值不为null的输入行数
使用countid:
或:
每一个表达式给出
表达式值不为null的输入行数
您需要修改连接并稍微聚合一点-
select ms.status, count(m.status)
from (select unnest(enum_range(null::mem_status))) as ms(status)
left join mems as m
on ms.status = m.status
group by ms.status;
您需要修改连接并稍微聚合一点-
select ms.status, count(m.status)
from (select unnest(enum_range(null::mem_status))) as ms(status)
left join mems as m
on ms.status = m.status
group by ms.status;
请提供一些INSERT语句和再现问题的mems示例数据。请提供一些INSERT语句和再现问题的mems示例数据。
select status, count(id)
from unnest(enum_range(null::mem_status)) as status
left join mems using(status)
group by status
status | count
---------+-------
waiting | 0
active | 2
expired | 1
(3 rows)
select ms.status, count(m.status)
from (select unnest(enum_range(null::mem_status))) as ms(status)
left join mems as m
on ms.status = m.status
group by ms.status;