每第 n 组求和 SQL 行

Sum SQL rows on every nth and group

我的数据如下:

QUARTER_CMT   DEPT   SALES
7             A      39
8             A      23
9             A      33
10            A      45
11            A      50 
12            A      110
1             B      44
2             B      56
3             B      87
4             B      22

我的目标是在 DEPT 之前每 4 个季度获得总数 SALES,并保留 Quarter_CNT 个数字作为汇总。

QUARTER_CMT   DEPT   SALES_TOT
7             A      140
11            A      160 
1             B      209

正在进行的代码。我想对总计进行分组并加入最新的 QUARTER_CMT 以获得一行 DEPT :

SELECT 
 ROW_NUMBER() OVER(PARTITION BY DEPTORDER BY QUARTER_CMT) as RN,
 QUARTER_CMT,
 DEPT,
--RANK() OVER(PARTITION BY ODDZIAL ORDER BY QUARTER_COUNT) AS RowNumberRankOrg,
--NTILE(4) OVER(PARTITION BY ODDZIAL ORDER BY QUARTER_COUNT) AS RowNumberRank,
SALES

FROM TABLE_1
ORDER BY DEPT, QUARTER_CMT

您需要将 row_number 除以 5 以确定周期

SELECT MIN (QUARTER_CMT) QUARTER_CMT, DEPT, SUM(SALES) SALES, PART
FROM (
    SELECT *, FLOOR(ROW_NUMBER() OVER(PARTITION BY DEPT ORDER BY QUARTER_CMT) / 5) AS PART
    FROM TABLE_1
) AS T
GROUP BY DEPT, PART
ORDER BY DEPT, PART

结果:

QUARTER_CMT DEPT SALES       PART
----------- ---- ----------- -----------
7           A    140         0
11          A    160         1
1           B    209         0

试试这个:

with a as (
  select 
    row_number() over(partition by dept order by quarter_cmt)-1 n, 
    quarter_cmt, dept, sales
  from t
  order by dept, quarter_cmt
) 
select min(quarter_cmt) quarter_cmt, dept, sum(sales) sales_tot
from a
group by dept, floor(n/4) 
order by dept, quarter_cmt
;

假设此示例数据:

create or replace table t as
select  QUARTER_CMT,  DEPT,  SALES from values 
  (7,'A',39),
  (8,'A',23),
  (9,'A',33),
  (10,'A',45),
  (11,'A',50),
  (12,'A',110),
  (1,'B',44),
  (2,'B',56),
  (3,'B',87),
  (4,'B',22)
;