Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Postgresql上使用group by进行计数_Postgresql_Aggregate Functions - Fatal编程技术网

在Postgresql上使用group by进行计数

在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

我有一个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,结果如下所示

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;