对每n个和组上的SQL行求和

对每n个和组上的SQL行求和,sql,group-by,partition,snowflake-cloud-data-platform,Sql,Group By,Partition,Snowflake Cloud Data Platform,我的数据如下: 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

我的数据如下:

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 在建工程代码。我想将总计分组,并加入最新的
季度\u CMT
,以便在
部门中有一行:

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 挑选 (按DEPTORDER按四分之一划分)上的行数()作为RN, 四分之一, 部, --排名()超过(按ODDZIAL顺序划分,按季度计数)为RowNumberRankOrg, --第(4)个整数(按奇数顺序除以四分之一计数)为RowNumberRank, 出售 来自表1 按部门、季度和CMT订购
您需要将行数除以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 $1 QUARTER_CMT, $2 DEPT, $3 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)
;

你能在你这边贴上5除的确切数字吗?在《雪花》中,除法的结果对我来说很奇怪。我还将四分之一部分添加到了结果中。也许您还需要整数转换。
PART
返回以下结果:
0.200000,0.400000,0.600000,0.800000,1.000000,1.200000
etcit看起来需要转换为int。我对此进行了更新。我运行了嵌套代码并得到了结果:
QUARTER\u CMT(7),PART(0);四分之一CMT(8),第(0)部分;第(1)部分第(9)节;第(1)部分第(10)节;第(1)部分第(11)节;季度CMT(12)第(1)部分
create or replace table t as
select $1 QUARTER_CMT, $2 DEPT, $3 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)
;