如何按日期分区获取每日摄入卡路里最大值的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
相关产品推荐
相关产品推荐

