sql - postgresql - 选择 4 列,其中 1 列需要过滤
问题描述
这里的 PostgreSQL 初学者,对 JOIN 或 CASE 还不是很了解。
在我的选择语句中过滤的最佳方法是什么,以便我可以获得以下输出:
- 注册月
- total_signups
- 业务注册
- 总用户数
示例表:
日期 | 注册电子邮件 | 等级 | 用户 |
---|---|---|---|
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;
解决方案
您需要条件聚合,在 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
推荐阅读
- ssas - 什么是 MDX“不在”SQL 的 where 子句的模拟?
- android - 从sqlite数据库获取数据作为livedata android
- jquery - 如何将 bootstrap js 与 jquery-ui 一起使用?
- html - 对齐两个不同的段落
- php - 使用 Django 在 Apache2 上启用子站点
- python - while 循环因“功能策略阻止了设备方向事件”而停止。
- flatbuffers - Flatbuffer:运行时和编译器的兼容性
- sum - 对不同的重复行求和
- c - 内嵌 DHT11,首次打印后温度变为 0
- java - 为什么 BufferedReader::readLine 挂在 EOF 上?