首页 > 解决方案 > postgresql - 选择 4 列,其中 1 列需要过滤

问题描述

这里的 PostgreSQL 初学者,对 JOIN 或 CASE 还不是很了解。

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

示例表:

日期 注册电子邮件 等级 用户
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

样本输出:

注册月 total_signups 业务注册 总用户数
可能 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;

标签: sqlpostgresqlamazon-redshiftamazon-rds

解决方案


您需要条件聚合,在 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

推荐阅读