postgresql - select 4 列,其中 1 列需要过滤
postgresql - select 4 columns, 1 of the columns requires filtering
这里是 PostgreSQL 初学者,还没有很好地掌握 JOIN 或 CASE。
在我的 select 语句中过滤的最佳方法是什么,以便我可以获得以下输出:
- signup_month
- total_signups
- business_signups
- total_users
示例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
这里是 PostgreSQL 初学者,还没有很好地掌握 JOIN 或 CASE。
在我的 select 语句中过滤的最佳方法是什么,以便我可以获得以下输出:
- signup_month
- total_signups
- business_signups
- total_users
示例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