如何用SQL按日计算YTD的日均、最小值及最大值?
实现Science科目YTD日均、日最小/最大统计的SQL方案
首先,你需要先按日期分组统计每天的Science记录数,再基于这些每日数据计算YTD的目标指标。用CTE(公共表表达式)分步实现,逻辑更清晰:
完整查询代码
-- 第一步:统计每日Science的记录数 WITH daily_science_stats AS ( SELECT -- 处理日期格式,转换为标准日期类型确保分组准确 CAST(REPLACE(Study_Date, '\', '/') AS DATE) AS study_day, COUNT(ID) AS daily_count FROM your_table WHERE Subject = 'Science' -- 注意:示例数据是2018年,原查询写的2022,记得改成实际需要的年份 AND YEAR(CAST(REPLACE(Study_Date, '\', '/') AS DATE)) = 2018 GROUP BY CAST(REPLACE(Study_Date, '\', '/') AS DATE) ) -- 第二步:基于每日统计计算YTD指标 SELECT 'Science' AS Subject, -- 日均数量,保留2位小数,可按需调整精度 ROUND(AVG(daily_count), 2) AS avg_daily_ytd, MIN(daily_count) AS min_daily_ytd, MAX(daily_count) AS max_daily_ytd, SUM(daily_count) AS total_ytd_count -- 保留你原查询需要的YTD总数 FROM daily_science_stats;
关键细节说明
- 日期格式处理:你的
Study Date是带反斜杠的字符串,需要先替换为斜杠再转成日期类型,避免因格式问题导致分组错误。如果数据库中Study Date本身就是日期类型,直接用Study_Date即可,无需转换。 - 数据库适配:
- 若使用MySQL,日期转换可替换为
STR_TO_DATE(Study_Date, '%m\\%d\\%Y') - 若使用SQL Server,用
CONVERT(DATE, Study_Date, 101)即可(101对应MM/DD/YYYY格式,反斜杠不影响转换)
- 若使用MySQL,日期转换可替换为
- 指标逻辑:
AVG(daily_count):统计所有有Science记录日期的日均数量MIN/MAX(daily_count):直接取单日Science记录数的最小/最大值- 如果需要包含无Science记录的日期(统计为0),需要先生成全年日期序列再左连接当前统计结果,不过从你的需求示例看,无需此步骤。
内容的提问来源于stack exchange,提问作者jnic
相关产品推荐
相关产品推荐

