我有一个带有表格的mysql数据库。该表包含以下一些信息。它在1月到5月的一个列中具有值。五个月了。在相邻的列上,有#34; Counts"每个月的整数值。请记住,月份可能存在重复值。因此,例如,表格的片段可以读取 一月|五 一月| 10 二月| 1 三月| 20 四月| 23 四月| 34 四月| 43 五月| 9 还有更多的记录(160)。假设当月的平均值正在运行一些sql命令 从月份中选择月份,从表名组中计算平均值(计数)。但是,这会将每个月的计数总和除以记录数。真正的平均值会将计数总和除以每个月的天数。所以我有以下陈述,
select month, sum(count)/31 from trendsummary.traffictype where month like 'January';
select month, sum(count)/28 from trendsummary.traffictype where month like 'February';
select month, sum(count)/31 from trendsummary.traffictype where month like 'March';
select month, sum(count)/30 from trendsummary.traffictype where month like 'April';
select month, sum(count)/31 from trendsummary.traffictype where month like 'May';
这给出了每月计数的平均值。所以问题是......如果我想要平均1月到4月的平均值,那会是什么语法?所以...我希望有一些陈述可以取每个月的平均值(基于每月的天数),然后取一月,二月,三月和四月的平均值并吐出这个价值出来了?怎么会这样呢?谢谢!
答案 0 :(得分:0)
你可以尝试:
select month, sum(count)/(31+28+31+30)
from trendsummary.traffictype
where month in ( 'January' , 'February','March','April' );
答案 1 :(得分:0)
联合选择并将它们括在括号中,并将其作为数据源处理,如下例所示:
select avg(*) from (
select month, sum(count)/31 as average from ...
union select ...
union select ...
)
请记住,大多数sql引擎都需要像我一样命名计算表达式列(作为平均值),至少在所有联合选择的第一个选择中。