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
Гораздо проще и эффективнее переписать его так:
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
Обратите внимание на SUM(SUM(d))
здесь.
Самым внутренним SUM
является агрегатная функция. Он вычисляет SUM(d)
a-b-c
-wise.
Самым внешним SUM
является аналитическая функция. Суммирует предварительно вычисленные значения SUM(d)
a-b
и возвращает значение вместе с каждым рядом.