PostgreSQL SELECT查询如何新增带过滤条件的企业注册数统计列
解决方案
你只需在现有SELECT列表中新增一列条件聚合统计项即可,无需调整分组逻辑,也不需要使用JOIN,用CASE WHEN配合聚合函数就能实现企业注册数的统计,修改后的语句如下:
SELECT DATE_PART('month', signup_date) AS signup_month, COUNT(signup_email) AS total_signups, SUM(CASE WHEN signup_email = 'business' THEN 1 ELSE 0 END) AS business_signups, SUM(users) AS total_users FROM signups GROUP BY signup_month;
逻辑说明
- 上述新增列的逻辑是先通过
CASE WHEN对每行数据做判断:如果signup_email的值为business则返回1,否则返回0,再通过SUM求和,最终得到当月符合条件的企业注册总数 - 你也可以用COUNT实现等价逻辑:
COUNT(CASE WHEN signup_email = 'business' THEN 1 END) AS business_signups,COUNT会自动忽略CASE语句返回的NULL值,统计结果和SUM写法完全一致 - 如果你需要统计跨年度的月份数据,避免不同年份的同月份被合并,可以把
DATE_PART('month', signup_date)替换为DATE_TRUNC('month', signup_date)::DATE,会返回如2024-01-01的月份首日格式,统计维度更准确
内容的提问来源于stack exchange,提问作者SR20DET
相关产品推荐
相关产品推荐

