postgresql - select 4 列,其中 1 列需要过滤

postgresql - select 4 columns, 1 of the columns requires filtering

这里是 PostgreSQL 初学者,还没有很好地掌握 JOIN 或 CASE。

在我的 select 语句中过滤的最佳方法是什么,以便我可以获得以下输出:

示例table:

日期 signup_email 等级 用户
2014-05-02 个人 试用 1
2014-05-04 个人 订阅 1
2014-05-12 个人 订阅 2
2014-05-25 商业 试用 1
2014-06-02 个人 订阅 1
2014-06-20 商业 订阅 10
2014-06-30 商业 试用 5

示例输出:

signup_month total_signups business_signups total_users
可能 4 1 5
六月 3 2 16

这是一个只输出 3 列的基本查询(signup_month、total_signups 和 total_users)。我在添加仅从 signup_email 列计算 business_signups 的第 4 列时遇到问题,因为它只需要计算 = 'business'

的值
SELECT DATE_PART(month,signup_date) AS signup_month,
       COUNT(signup_email) AS total_signups,
       SUM(users) AS total_users

FROM signups
GROUP BY signup_month;

您需要条件聚合,它在 Postgres 中使用 filter

但是,您可能希望在月份中包含年份,因此我建议 date_trunc():

SELECT DATE_TRUNC('month', signup_date) AS signup_month,
       COUNT(*) AS total_signups,
       COUNT(*) FILTER (WHERE signup_email = 'business') as business_signups,
       SUM(users) AS total_users
FROM signups
GROUP BY signup_month