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

如何用SQL CASE语句替换超限时长并保留用户总数,计算平均时长

计算用户平均时长时替换超限时长而非过滤用户

原查询通过WHERE Duration < 3600过滤了超时时长的用户,导致统计的用户总数缺失,平均时长计算偏差。要保留所有用户并将超3600秒的时长替换为上限值,可通过以下两种方式实现:

方案1:使用CASE条件判断

通过CASE语句对超时时长进行替换,再计算总和与平均值:

SELECT
  date,
  COUNT(*) AS total_users,
  SUM(CASE WHEN duration > 3600 THEN 3600 ELSE duration END) / COUNT(*) AS avgdur
FROM your_table_name
GROUP BY date;

方案2:使用LEAST函数(更简洁)

多数数据库支持LEAST()函数,直接取duration和3600中的较小值:

SELECT
  date,
  COUNT(*) AS total_users,
  SUM(LEAST(duration, 3600)) / COUNT(*) AS avgdur
FROM your_table_name
GROUP BY date;

验证示例数据

针对你提供的6条示例数据:

  • 替换后总时长为:3600+200+600+1000+3600+200 = 9200
  • 平均时长:9200 ÷ 6 ≈ 1533,与预期结果一致

可选:替换为平均值

如果需要将超时时长替换为该日期的平均时长(而非固定上限3600),可使用子查询实现:

SELECT
  t.date,
  COUNT(*) AS total_users,
  SUM(CASE WHEN t.duration > 3600 THEN avg_dur ELSE t.duration END) / COUNT(*) AS avgdur
FROM your_table_name t
JOIN (
  SELECT date, AVG(duration) AS avg_dur
  FROM your_table_name
  GROUP BY date
) dt ON t.date = dt.date
GROUP BY t.date;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 13:40:32