根据状态返回计数的用户

问题描述 投票:0回答:1

我有以下 PostgreSQL 表:

CREATE TABLE users
(
    id uuid NOT NULL,
    login_name character varying(255),
    status character varying(10), // it can be enabled/disabled
    created_at timestamp(6)
)

我想创建 SQL 查询来获取汇总统计信息。例如,八月份我总共有多少启用和禁用用户:

我试过:

SELECT ID, 
  DATE(CREATED_AT) AS date, 
  COUNT(*) AS enabled, 
  COUNT(*) AS disabled 
FROM users 
WHERE (created_at BETWEEN '2022-05-02 06:58:24.620396' AND '2023-05-02 06:58:24.620396') 
GROUP BY DATE(created_at), id

但我得到这个结果:

我想得到这样的数据:

你知道我如何正确地实现这个查询吗?

sql postgresql pivot aggregate-functions
1个回答
1
投票

如果您希望按用户创建的月份对用户进行分组,并计算当前启用/禁用的用户数,那么您可以使用条件聚合:

select date_trunc('month', created_at) created_month,
    count(*) filter (where status = 'enabled' ) cnt_enabled,
    count(*) filter (where status = 'disabled') cnt_disabled
from mytable
group by date_trunc('month', created_at)
© www.soinside.com 2019 - 2024. All rights reserved.