我有一个如下所示的示例表,并希望根据MONTH
和DATE
的{{1}}进行平均。有什么方法可以在SQL中做到这一点。
ID
Table:Input
DATE ID VOLUME
20080630 A 45
20080628 A 23
20080629 A 34
20080627 A 33
20080730 A 45
20080728 A 12
20080730 A 34
20080724 A 56
20080430 A 34
20080428 A 23
20080630 B 12
20080628 B 45
20080629 B 67
20080627 B 78
20080730 B 45
20080728 B 12
20080730 B 34
20080724 B 56
20080430 B 2
20080428 B 34
Table:Output
答案 0 :(得分:1)
您可以尝试此查询:
select DATE_FORMAT(date,'%Y%m'), id, avg(volume) from xxx1
group by DATE_FORMAT(date,'%Y%m'), ID;
或
select DATE_FORMAT(date,'%m'), id, avg(volume) from xxx1
group by DATE_FORMAT(date,'%m'), ID
说明:
DATE_FORMAT(date,'%Y%m')
从日期中提取月份和年份。而DATE_FORMAT(date,'%m')
仅提取月份。 (我不太确定,如果你想要没有一年的月份)。
基本上,您提取月份,然后将其与ID一起分组,并计算这些组的体积平均值。
答案 1 :(得分:1)
这是标准SQL答案,因为您没有标记DBMS:
AVG(VOLUME)
OVER (PARTITION BY EXTRACT(YEAR FROM datecolumn)
,EXTRACT(MONTH FROM datecolumn))
答案 2 :(得分:0)
如果您使用的是mssql服务器then so
select t1.*, t2.AVG
from TABLE1 t1
join
(
SELECT avg(volume) as AVG, MONTH(date) as DATE
FROM TABLE1
GROUP BY MONTH(date), ID
) t2 on MONTH(t1.DATE) = t2.DATE
输出将与所需的匹配。查询将从源表中选择所有列,并将GROUP BY添加一列。