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

如何使用SELECT CASE与别名实现总里程的聚合求和输出?

解决方法:将CASE逻辑嵌入SUM内部实现单一总里程汇总

你的问题出在把CASE放在SUM外面并按dist_is_duration分组,这会把数据分成两组分别计算总和,所以得到两个结果。要获取单一总里程,需要把CASE判断逻辑移到SUM函数内部,让每一行数据先根据dist_is_duration计算出对应的里程贡献,再把所有行的贡献汇总成一个总和。

修正后的查询语句

SELECT ROUND(SUM(
    CASE 
        WHEN d.dist_is_duration = 1 THEN s.activity_steps * d.dist_activity_duration / 2000
        WHEN d.dist_is_duration = 0 THEN d.dist_activity_duration
    END
), 2) AS total_miles 
FROM distance d 
JOIN activities a ON a.id = d.dist_activity_id 
JOIN steps s ON s.id = a.steps_id 
JOIN members AS m ON d.member_id = m.id AND m.id = ?

逻辑说明

  1. 对每一行distance记录,根据dist_is_duration的值计算该行对应的里程:
    • 当dist_is_duration=1时,用原公式计算里程:s.activity_steps * d.dist_activity_duration / 2000
    • 当dist_is_duration=0时,直接使用已有的英里值:d.dist_activity_duration
  2. 用SUM函数把所有行的里程贡献加起来,最后用ROUND保留两位小数,得到单一的总里程数值。
  3. 去掉了GROUP BY d.dist_is_duration,因为我们不需要分组统计,而是要全局汇总。

这样执行后,就能得到你想要的单一汇总总里程,而不是分组后的两个结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:21:55