如何使用 OVER PARTITION BY 改进 SQL Teradata
How to improve SQL Teradata with OVER PARTITION BY
我有一个超过 7 列的查询,其中包含一些 counts() 和 sum() 值,我很慢,然后我尝试使用 OVER PARTITION BY,但结果 table 我有一个错误 "Selected non-aggregate values must be part of the associated group"。
这是查询:
insert into SQUEMA.TABLE_B
select
SUBSTR(cast(date as char(6)) ,1,4) ||'-'|| SUBSTR(cast(date as char(6)) ,5,6) as date ,
column1,
column2,
column3,
.
.
.
.
column7,
count(column8) OVER (PARTITION BY date, column1,...,column7) as column8
SUM(column9) OVER(ORDER BY date ) as column9
from SQUEMA.TABLE_A tb
where tb.date between '201711' and '201812'
group by date, column1,...,column7;
错误
Selected non-aggregate values must be part of the associated group
我相信你想要:
sum(count(column8)) OVER (PARTITION BY date, column1,...,column7) as column8
sum(sum(column9))) OVER (ORDER BY date ) as column9
这就是 window 聚合函数的使用方式。
我有一个超过 7 列的查询,其中包含一些 counts() 和 sum() 值,我很慢,然后我尝试使用 OVER PARTITION BY,但结果 table 我有一个错误 "Selected non-aggregate values must be part of the associated group"。
这是查询:
insert into SQUEMA.TABLE_B
select
SUBSTR(cast(date as char(6)) ,1,4) ||'-'|| SUBSTR(cast(date as char(6)) ,5,6) as date ,
column1,
column2,
column3,
.
.
.
.
column7,
count(column8) OVER (PARTITION BY date, column1,...,column7) as column8
SUM(column9) OVER(ORDER BY date ) as column9
from SQUEMA.TABLE_A tb
where tb.date between '201711' and '201812'
group by date, column1,...,column7;
错误
Selected non-aggregate values must be part of the associated group
我相信你想要:
sum(count(column8)) OVER (PARTITION BY date, column1,...,column7) as column8
sum(sum(column9))) OVER (ORDER BY date ) as column9
这就是 window 聚合函数的使用方式。