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

如何按日期分区获取每日摄入卡路里最大值的MySQL查询结果

问题

想要获取每日摄入的卡路里最大值(即每日总卡路里),期望查询结果为每个日期对应一行,包含当日总卡路里列。目前编写的MySQL CTE查询只能实现按meal_date分区累加卡路里,无法得到目标结果(截图中带红星的是每日所需值),需要帮助完成目标查询。

当前查询代码:

with meals_in_day as
(
select *, 
row_number() over (partition by meal_date order by meal_name ) as meals_through_day,
sum(calories) over (partition by meal_date order by meal_name ) as incremental_calories
from calories_data
)

select *
from meals_in_day;
解决方案

你现在的查询用了带order by的窗口sum,得到的是逐餐累加的卡路里值,不是当日的总摄入。要拿到每日总卡路里,有两种简单方法:

方法1:直接分组聚合(最省事高效)

不用CTE,直接按meal_date分组求和就行:

select 
  meal_date,
  sum(calories) as daily_total_calories
from calories_data
group by meal_date
order by meal_date;

方法2:用窗口函数(需要保留原表字段时用)

如果要保留每条记录同时显示当日总卡路里,把窗口函数里的order by去掉就行(不带排序的窗口sum会计算整个日期分区的总和):

select *,
  sum(calories) over (partition by meal_date) as daily_total_calories
from calories_data;

要是只需要每日一行的结果,优先用方法1,执行效率高,结果完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 22:22:34