App*_*rew 1 sql oracle group-by aggregate-functions
我有如下查询
SELECT a.*, b.*
(SELECT ATTR1, ATTR2, sum(QUANTITY) AS TOTAL_QTY,
ATTR3 FROM TABLE_A
WHERE ATTR4 > 0
GROUP BY ATTR1, ATTR2, ATTR3) a,
TABLE_B b
WHERE a.ATTR1 = b.ATTR1
AND a.ATTR2 = b.ATTR2
Run Code Online (Sandbox Code Playgroud)
我GROUP BY只ATTR1需要计算正确的TOTAL_QTY,但唯一的原因是我将其他属性分组,因为Oracle要求if GROUP BY子句存在,那么所有SELECT属性也应该在GROUP BY子句中.
这意味着每次我需要Table_A中的此查询中的属性时,我也需要将其放入GROUP BY.这不仅看起来很丑陋,而且可能会产生性能影响,也许会产生不可预见的副作用.
如何TOTAL_QTY在ATTR1没有GROUP BY子句的情况下重写上面的查询来计算每个组?
使用Oracle分析功能.将内联视图更改为table_a:
select attr1,
attr2,
sum(quantity) over (partition by attr1 order by attr1) as total_qty,
attr3
from table_a
where attr4 > 0
Run Code Online (Sandbox Code Playgroud)
这可能需要调整一下,但这是基本的想法.