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

PostgreSQL中优化销售部门工作时段来电统计查询的方法

优化后的查询语句
SELECT 
  SUM(CASE WHEN to_phone_number = '15125551234' THEN 1 ELSE 0 END) AS sales_all,
  SUM(CASE 
        WHEN to_phone_number = '15125551234' 
             AND EXTRACT(DOW FROM start_time) BETWEEN 1 AND 5  -- 只统计周一到周五(对应原逻辑里的8/8-8/12)
             AND EXTRACT(EPOCH FROM start_time::TIME)/60 BETWEEN 450 AND 1050  -- 7:30 AM 到 5:30 PM,转换成分钟数统一判断
        THEN 1 ELSE 0 END) AS sales_between_business_hours
FROM call_logs
WHERE start_time >= '2022-08-08 00:00:00' 
  AND start_time <= '2022-08-14 23:59:59';
核心优化思路
  • 减少重复代码:原查询每个OR分支都重复写了号码判断,直接把to_phone_number = '15125551234'放在CASE最前面,一次判断即可;因为只有单个号码,用=代替IN更简洁。
  • 统一工作时段判断:不用逐天写日期+时间范围,把时间转换成分钟数(7:30=450分钟,17:30=1050分钟),通过提取时间部分的分钟总量,直接判断是否在目标区间。
  • 可选工作日筛选:原查询只统计周一到周五的工作时段,所以加上EXTRACT(DOW FROM start_time) BETWEEN 1 AND 5(PostgreSQL中DOW=0为周日,1-5对应周一到周五),如果业务允许统计周末,删掉这个条件即可。
  • 规范日期格式:使用YYYY-MM-DD HH:MI:SS这种PostgreSQL更兼容的日期格式,避免解析出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 01:15:51