MySQL-平均忽略空值并基于工作日
我试图对以下数据进行一些分析MySQL-平均忽略空值并基于工作日,mysql,null,average,data-analysis,weekday,Mysql,Null,Average,Data Analysis,Weekday,我试图对以下数据进行一些分析 WeekDay Date Count 5 06/09/2018 20 6 07/09/2018 Null 7 08/09/2018 19 1 09/09/2018 16 2 10/09/2018 17 3 11/09/2018 24 4 12/09/2018 25 5 13/09/2018 24 6 14/09/2018 23 7 15/09/2018 2
WeekDay Date Count
5 06/09/2018 20
6 07/09/2018 Null
7 08/09/2018 19
1 09/09/2018 16
2 10/09/2018 17
3 11/09/2018 24
4 12/09/2018 25
5 13/09/2018 24
6 14/09/2018 23
7 15/09/2018 23
1 16/09/2018 9
2 17/09/2018 23
3 18/09/2018 33
4 19/09/2018 22
5 20/09/2018 31
6 21/09/2018 17
7 22/09/2018 10
1 23/09/2018 12
2 24/09/2018 26
3 25/09/2018 29
4 26/09/2018 27
5 27/09/2018 24
6 28/09/2018 29
7 29/09/2018 27
1 30/09/2018 19
2 01/10/2018 26
3 02/10/2018 39
4 03/10/2018 32
5 04/10/2018 37
6 05/10/2018 Null
7 06/10/2018 26
1 07/10/2018 11
2 08/10/2018 32
3 09/10/2018 41
4 10/10/2018 37
5 11/10/2018 25
6 12/10/2018 20
我想解决的问题是:我想创建一个表,其中包含与该天相关的最后3个相同工作日的平均值。但是,当工作日中存在空值时,我希望忽略并仅对剩余的数字进行平均,而不是将空值计算为0。这里我给大家举个例子:
此表中的日期为日/月/年:
例:2018年10月12日,我需要
2018年10月5日;28/09/2018; 21/09/2018. 这是与2018年10月12日相同的最后3个工作日。
. 它们的值为空;29; 17那么这个平均值的结果必须是23,因为我需要忽略空值,而不是15333
如何执行此操作?在选择中使用IsNULLCount,0
SELECT WeekDay, AVG(Count)
FROM myTable
WHERE Count IS NOT NULL
GROUP BY WeekDay
SELECT WeekDay, AVG(IsNULL(Count,0))
FROM myTable
GROUP BY WeekDay
首先,您需要获取数据中该工作日的实例数,因为您只需要最后3个相同的工作日
create table table2
as
select
row_number() over(partition by weekday order by date desc) as rn
,weekday
,date
,count
from table
从这里,你可以得到你想要的。根据您的解释,您不需要为count过滤掉空值。仅仅做avg聚合就会忽略它
select
weekday
,avg(count)
from table2
where rn in (1,2,3)
group by weekday
count函数忽略空值,也就是说,如果遇到空值,它不会递增,因此我建议您只需对值进行计数,然后可能会包含希望忽略的空值
dow datecol value
6 21/09/2018 17
6 28/09/2018 29
6 05/10/2018 Null
e、 g.sumvalue高于=46,countvalue=2,因此平均值为23.0,avgvalue也将返回23.0,因为它也忽略了空值
select
weekday
, `date`
, `count`
, (select (sum(`count`) * 1.0) / (count(`count`) * 1.0)
from atable as t2
where t2.weekday = t1.weekday
and t2.`date` < t1.`date
order by t2.`date` DESC
limit 3
) as average
from atable as t1
您可以在上面的查询中使用avgcount,并得到相同的结果
另外,我希望您不要使用count作为列名!我还建议您也不要使用date作为列名。i、 e.避免使用SQL术语作为名称。如果Count不是null,MySQL应该是一个标记,而不仅仅是在标题中。但是MySQL现在的版本8有了新的特性,那么您使用的是哪个版本的MySQL呢?平均值函数也会忽略空值。实际上,所有聚合函数都忽略空值。From:除非另有说明,否则组函数忽略空值。谢谢您的回答。但我需要为每个日期的平均值从过去3个相同的工作日。例如,在2018年10月12日,我需要2018年10月5日的平均值;28/09/2018; 21/09/2018. 这是与2018年10月12日相同的最后3个工作日。然后,从2018年10月11日开始,我需要2018年10月4日、2018年9月17日和2018年9月20日的平均值,以此类推。每天从我的数据