You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于状态统计用户数量的PostgreSQL查询实现

正确实现PostgreSQL用户状态统计查询

原查询存在的问题

  1. 分组逻辑错误:GROUP BY包含id,导致每个用户单独成组,无法实现按日期的汇总统计
  2. 统计逻辑无效:COUNT(*)未区分status值,因此enabled和disabled列会显示相同数值,无法体现不同状态的用户数量
  3. 日期范围处理不严谨:使用BETWEEN可能遗漏8月最后一天中晚于结束时间戳的记录,建议采用更精准的日期筛选方式

按日期统计8月份每日用户状态数量

如果需要按天汇总8月份每天的启用/禁用用户数,可通过条件聚合实现:

SELECT 
  DATE(created_at) AS date,
  -- 统计当天enabled状态的用户数
  COUNT(CASE WHEN status = 'enabled' THEN 1 END) AS enabled_count,
  -- 统计当天disabled状态的用户数
  COUNT(CASE WHEN status = 'disabled' THEN 1 END) AS disabled_count,
  -- 统计当天总用户数
  COUNT(*) AS total_users
FROM users
-- 筛选8月份数据(以2023年为例,可按需修改年份)
WHERE created_at >= '2023-08-01' AND created_at < '2023-09-01'
GROUP BY DATE(created_at)
ORDER BY date;

统计8月份用户状态总数量

如果只需要整个8月份的启用/禁用用户总数,去掉分组逻辑即可:

SELECT 
  COUNT(CASE WHEN status = 'enabled' THEN 1 END) AS enabled_total,
  COUNT(CASE WHEN status = 'disabled' THEN 1 END) AS disabled_total,
  COUNT(*) AS total_users
FROM users
WHERE created_at >= '2023-08-01' AND created_at < '2023-09-01';

补充说明

  • 条件聚合逻辑:CASE WHEN匹配符合条件的行,COUNT会忽略NULL值,因此只会统计对应状态的有效用户数
  • 日期范围采用>= 月初 AND < 下月初的写法,可精准覆盖整个月份的所有时间戳,避免因时间精度问题遗漏数据

内容的提问来源于stack exchange,提问作者Peter Penzov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 21:40:20