Mysql 每个月所有周的SQL平均值
我试图得到每个月所有周的平均值。我如何在MySQL中做到这一点?以下是我所拥有的,也是我所需要的:Mysql 每个月所有周的SQL平均值,mysql,sql,aggregation,lag,window-functions,Mysql,Sql,Aggregation,Lag,Window Functions,我试图得到每个月所有周的平均值。我如何在MySQL中做到这一点?以下是我所拥有的,也是我所需要的: SELECT date_part(year, date_of_act) AS CALENDAR_YEAR, date_part(week, date_of_act) AS CALENDAR_WEEK_OF_YEAR, (num_active_div
SELECT
date_part(year, date_of_act) AS CALENDAR_YEAR,
date_part(week, date_of_act) AS CALENDAR_WEEK_OF_YEAR,
(num_active_divs / total_num_divs) AS "Weekly average for each year of week"
FROM
Infotable
GROUP BY calendar_year, calendar_week_of_year
ORDER BY calendar_year, calendar_week_of_year
What I have: What I have: What I have:
Calendar_Year Days of the year Calendar_Week_of_year Weekly average for each year of week
2018, Jan 01 - Jan 07, 1, 0.266855
2018, Jan 08 - Jan 14, 2, 0.297223
2018, Jan 15 - Jan 21, 3, 0.308583
2018, Jan 22 - Jan 28, 4, 0.309994
2018, Jan 29 - Feb 04, 5, 0.317419
2018, Feb 05 - Feb 11, 6, 0.316454
2018, Feb 12 - Feb 18, 7, 0.313929
2018, Feb 19 - Feb 25, 8, 0.315489
2018, Feb 26 - Mar 04, 9, 0.3218
2018, Mar 05 - Mar 11, 10, 0.308509
2018, Mar 12 - Mar 18, 11, 0.302866
2018, Mar 19 - Mar 25, 12, 0.31586
What I need: What I need: What I need: What I need:
Calendar_Year Calendar_Week_of_year Weekly average for each year of week Calendar_Month_of_year Week_of_month Average for all weeks in that month
2018, Jan 01 - Jan 07, 1, 0.266855, 1, 1
2018, Jan 08 - Jan 14, 2, 0.297223, 1, 2
2018, Jan 15 - Jan 21, 3, 0.308583, 1, 3
2018, Jan 22 - Jan 28, 4, 0.309994, 1, 4, (0.266855+0.297223+0.308583+0.309994)/4
2018, Jan 29 - Feb 04, 5, 0.317419, 2, 1
2018, Feb 05 - Feb 11, 6, 0.316454, 2, 2
2018, Feb 12 - Feb 18, 7, 0.313929, 2, 3
2018, Feb 19 - Feb 25, 8, 0.315489, 2, 4, (0.317419+0.316454+0.313929+0.315489)/4
2018, Feb 26 - Mar 04, 9, 0.32180, 3, 1
2018, Mar 05 - Mar 11, 10, 0.308509, 3, 2
2018, Mar 12 - Mar 18, 11, 0.302866, 3, 3
2018, Mar 19 - Mar 25, 12, 0.31586, 3, 4, (0.3218+0.308509+0.302866+0.31586)/4
这里的一个选项是连接到一个子查询,该子查询查找每月平均值:
SELECT
t1.*,
t2.avg_weekly_average
FROM yourTable t1
INNER JOIN
(
SELECT Calendar_Year, (Calendar_Week_of_year - 1) / 4 AS month,
AVG(weekly_average) AS avg_weekly_average
FROM yourTable
GROUP BYCalendar_Year, (Calendar_Week_of_year - 1) / 4
) t2
ON t1.Calendar_Year = t2.Calendar_Year AND
(t1.Calendar_Week_of_year - 1) / 4 = t2.month;
如果您使用的是MySQL 8+,那么您可以在这里使用AVG
作为分析函数。在这种情况下,查询变得不那么简洁:
SELECT *,
AVG(weekly_average) OVER (PARTITION BY Calendar_Year,
(Calendar_Week_of_year - 1) / 4) avg_weekly_average
FROM yourTable t1;
你好,谢谢你的回复。我尝试了“AVG”选项,但它没有按预期工作。请参见下面的输出,它与预期值(最后一列)不同,出于某些原因-select语句可能需要以某种方式编辑?
日历年日历周周周周平均值,该月所有周的每年周平均值,2018年期望值1 0.266637 0.204148429 0.29542225 2018 2 0.29698 0.23631892 0.29542225 2018 3 0.308331 0.238056842 0.295422252018 4 0.309741 0.246393239 0.29542225 2018 5 0.31716 0.259385717 0.315565 2018 6 0.316196 0.259694425 0.315565 2018 7 0.313673 0.261424683 0.315565 2018 8 0.315231 0.260448818 0.315565 2018 9 0.321537 0.262954257 0.31200375 2018 10 0.308257 0.263811621 0.31200375 2018 11 0.302619 0.25810876 0.31200375 2018年12月0.315602 0.264338671 0.312003
日历年日历周周周周周平均值该月所有周的每年周平均值预计值2018年10.266637 0.204148429 0.29542225 2018年2 0.29698 0.23631892 0.29542225 2018年3 0.308331 0.238056842 0.29542225 2018年4 0.309741 0.24693239 0.295422252018 5 0.31716 0.259385717 0.315565 2018 6 0.316196 0.259694425 0.315565 2018 7 0.313673 0.261424683 0.315565 2018 8 0.315231 0.260448818 0.315565 2018 9 0.321537 0.262954257 0.31200375 2018 10 0.308257 0.263811621 0.31200375 2018 11 0.302619 0.25810876 0.31200375 2018 12 0.315602 0.264338671 0.31200375