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

如何DRY化PostgreSQL中计算任务完成率的查询语句?

如何DRY化计算特定日期范围任务完成率的SQL查询?

你可以通过单次扫描目标数据、在同一查询中完成完成数和总数的统计来实现DRY,避免重复编写WHERE条件,无需使用临时视图。以下是两种简洁的实现方式:

方法1:使用CASE表达式聚合统计

SELECT 
  SUM(CASE WHEN completed = true THEN 1 ELSE 0 END)::FLOAT / COUNT(*) AS completion_rate
FROM tasks
WHERE created_at > CURRENT_DATE - INTERVAL '15 day'
  AND created_at < CURRENT_DATE - INTERVAL '5 day';
  • 仅执行一次WHERE条件过滤,避免重复逻辑
  • SUM(CASE...)精准统计已完成的任务数量
  • 转换为FLOAT类型是为了避免整数除法导致结果被截断(不同数据库类型转换语法可能略有差异,比如MySQL可改用CAST(...) AS DECIMAL(5,2))

方法2:利用布尔值的数值特性直接计算平均值

多数SQL数据库会将布尔值true视为1、false视为0,因此可以直接用AVG函数计算完成率:

SELECT AVG(completed::FLOAT) AS completion_rate
FROM tasks
WHERE created_at > CURRENT_DATE - INTERVAL '15 day'
  AND created_at < CURRENT_DATE - INTERVAL '5 day';
  • 逻辑更简洁,AVG(completed)本质就是已完成任务数除以总任务数
  • 同样需要转换数值类型以确保得到小数形式的占比

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 05:45:36