sql - postgresql - 选择 4 列,其中 1 列需要过滤

标签 sql postgresql amazon-redshift amazon-rds

PostgreSQL 新手,对 JOIN 或 CASE 还没有很好的掌握。

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

  • 注册_月
  • 总注册数
  • business_signups
  • total_users

示例表:

<表类=“s-表”> <标题> 日期 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

示例输出:

<表类=“s-表”> <标题> 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的第四列时遇到问题,因为它只需要计算=“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 中使用过滤器

但是,您可能希望包含年份和月份,因此我建议 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

关于sql - postgresql - 选择 4 列,其中 1 列需要过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68239702/

相关文章:

mysql - 从一个表中选择数据并插入到另一个现有表中,该表中不存在

sql - 检查字符串是否是格式正确的 xml

mysql - 我们可以在 mysql 中执行一个按日期排序的选择查询,并在查询底部添加任何过期当前日期的内容吗?

ruby-on-rails - ActiveRecord::NoDatabaseError: FATAL: 数据库 "aquastarsbackend_development"不存在

python - 使用python的参数化postgresql select语句

php - 当查询涉及表名变量时,表单不起作用 -- PHP -- MYSQL

php - 第二种意见的安全性优势,我通过 postgresql 散列和加盐用户密码的计划是否存在缺陷?

postgresql:如何删除数据库集群

amazon-web-services - 如何从自定义 REST API 将数据加载到 Redshift

apache-spark - Parquet with Athena VS Redshift