首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按月份计算的Oracle Sql组平均费用

按月份计算的Oracle Sql组平均费用
EN

Stack Overflow用户
提问于 2018-10-25 06:58:05
回答 1查看 33关注 0票数 1

我有一张桌子像

代码语言:javascript
复制
ID    REFGROUP     YEAR   MONTH   VALUE
---     -----    ------  -----   -----
1       1000       2018    1       10
2       1000       2018    2       8 
3       1000       2018    3       12
4       2000       2018    1       6
5       2000       2018    2       8
6       2000       2018    3       1

我想一个月一个月,一个组,一年一个月

代码语言:javascript
复制
ID    REFGROUP     YEAR   MONTH   VALUE
---    -----    ------  -----   -----
1       1000       2018    1       10
2       1000       2018    2       9 
3       1000       2018    3       10
4       2000       2018    1       6
5       2000       2018    2       7
6       2000       2018    3       5

结果将在以上。对于第二个月,得到前两个月的平均分。在第三个月,Iw将获得前三个月组的平均分额和年份。

我每个月都试过工会但是。表现得很慢。我每年都有12个月的时间。如何写sql查询比我写的更快。我的花了8分钟,太贵了

代码语言:javascript
复制
select 1 AS AMONTHH, REFGROUP,AYEAR, AVG(TOTAL) from BMS.FNC_W_PAYROL WHERE AMONTH<=1 GROUP BY REFGROUP,AYEAR
UNION
select 2 AS AMONTHH, REFGROUP,AYEAR, AVG(TOTAL) from BMS.FNC_W_PAYROL WHERE AMONTH<=2 GROUP BY REFGROUP,AYEAR
UNION
select 3 AS AMONTHH, REFGROUP,AYEAR, AVG(TOTAL) from BMS.FNC_W_PAYROL WHERE AMONTH<=3 GROUP BY REFGROUP,AYEAR
UNION
select 4 AS AMONTHH, REFGROUP,AYEAR, AVG(TOTAL) from BMS.FNC_W_PAYROL WHERE AMONTH<=4 GROUP BY REFGROUP,AYEAR
UNION
select 5 AS AMONTHH, REFGROUP,AYEAR, AVG(TOTAL) from BMS.FNC_W_PAYROL WHERE AMONTH<=5 GROUP BY REFGROUP,AYEAR
UNION
select 6 AS AMONTHH, REFGROUP,AYEAR, AVG(TOTAL) from BMS.FNC_W_PAYROL WHERE AMONTH<=6 GROUP BY REFGROUP,AYEAR
UNION
select 7 AS AMONTHH, REFGROUP,AYEAR, AVG(TOTAL) from BMS.FNC_W_PAYROL WHERE AMONTH<=7 GROUP BY REFGROUP,AYEAR
UNION
select 8 AS AMONTHH, REFGROUP,AYEAR, AVG(TOTAL) from BMS.FNC_W_PAYROL WHERE AMONTH<=8 GROUP BY REFGROUP,AYEAR
UNION
select 9 AS AMONTHH, REFGROUP,AYEAR, AVG(TOTAL) from BMS.FNC_W_PAYROL WHERE AMONTH<=9 GROUP BY REFGROUP,AYEAR
UNION
select 10 AS AMONTHH, REFGROUP,AYEAR, AVG(TOTAL) from BMS.FNC_W_PAYROL WHERE AMONTH<=10 GROUP BY REFGROUP,AYEAR
UNION
select 11 AS AMONTHH, REFGROUP,AYEAR, AVG(TOTAL) from BMS.FNC_W_PAYROL WHERE AMONTH<=11 GROUP BY REFGROUP,AYEAR
UNION
select 12 AS AMONTHH, REFGROUP,AYEAR, AVG(TOTAL) from BMS.FNC_W_PAYROL WHERE AMONTH<=12 GROUP BY REFGROUP,AYEAR
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-25 07:06:17

我们可以在这里使用解析函数:

代码语言:javascript
复制
SELECT
    ID, REFGROUP, YEAR, MONTH,
    AVG(VALUE) OVER (PARTITION BY REFGROUP, YEAR ORDER BY MONTH) AVG_VALUE
FROM yourTable
ORDER BY
    REFGROUP, YEAR, MONTH;

Demo

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52983176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档