SELECT SUM as field

Tom*_*Tom 5 sql oracle

假设我有这张桌子

表(a,b,c,d).数据类型并不重要.

我想做这个

select a as a1,b as b1,c as c1,
       (select sum(d) from table where a=a1 and b=b1) as total
from table
group by a,b,c
Run Code Online (Sandbox Code Playgroud)

...但我找不到方法(sqldeveloper一直在抱怨"未找到来自子句".)

有办法吗?可能吗?

Qua*_*noi 8

SELECT  a as a1,b as b1,c as c1,
        (
        SELECT  SUM(d)
        FROM    mytable mi
        WHERE   mi.a = mo.a
                AND mi.b= mo.b
        ) as total
FROM    mytable mo
GROUP BY
        a, b, c
Run Code Online (Sandbox Code Playgroud)

重写它更简单有效:

SELECT  a AS a1, B AS b1, c AS c1, SUM(SUM(d)) OVER (PARTITION BY a, b) AS total
FROM    mytable
GROUP BY
        a, b, c
Run Code Online (Sandbox Code Playgroud)

请注意SUM(SUM(d))这里.

最里面的SUM是聚合函数.它计算SUM(d) a-b-c-wise.

最外层SUM是分析函数.它将预先计算的SUM(d)'s' a-b相加,并将值与每行一起返回.