SQL如何基于date和hash两列计算重复记录的average字段平均值
多维度分组求均值SQL写法
你需要的是按date和hash两个字段的联合分组做聚合,直接用基础的GROUP BY语法即可实现,不需要用窗口函数,正确语句如下:
SELECT AVG(average) AS average, date, hash FROM testing GROUP BY date, hash ORDER BY date, hash;
语法说明
GROUP BY后可以跟多个字段,会按多个字段的唯一组合进行分组,正好满足你同时按date、hash两个维度去重统计的需求,每一组对应date和hash值都完全相同的所有记录AVG(average)会对每组内的average字段计算平均值,输出的结果就是每个date+hash分组对应的平均数值,和你给出的期望输出完全匹配
你之前写法的问题
你尝试的窗口函数写法有两个问题:
- 分区仅指定了
wthr_date(也就是date字段),没有加入hash维度,所以统计的是单日所有记录的平均值,不是按date+hash分组的均值 - 窗口函数不会压缩结果行数,会保留原表所有记录,不会实现去重效果,不符合你每个date+hash只返回一条记录的需求
如果你实际表中的日期列名为wthr_date、数值列名为avg_tmpr_c(和你之前测试代码里的列名一致),把对应字段替换即可:
SELECT AVG(avg_tmpr_c) AS average, wthr_date AS date, hash FROM testing GROUP BY wthr_date, hash ORDER BY wthr_date, hash;
内容的提问来源于stack exchange,提问作者QbS
相关产品推荐
相关产品推荐

