ВЫБЕРИТЕ СУММУ как поле - PullRequest
       17

ВЫБЕРИТЕ СУММУ как поле

5 голосов
/ 08 октября 2009

Предположим, у меня есть эта таблица

таблица (а, б, в, г). Типы данных не важны.

Я хочу сделать это

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

... но я не могу найти способ (sqldeveloper продолжает жаловаться на "из предложения не найдено".)

Есть ли способ? Возможно ли это?

Ответы [ 3 ]

8 голосов
/ 08 октября 2009
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 и возвращает значение вместе с каждым рядом.

2 голосов
/ 08 октября 2009

Ты имеешь в виду что-то подобное?

select a as a1,
       b as b1,
       c as c1,
       sum(sum(d)) OVER (PARTITION BY a, b) AS total
from table
group by a,b,c
1 голос
/ 08 октября 2009

вы можете сделать это с псевдонимами:

SELECT a AS a1, b AS b1, c AS c1,
       (SELECT SUM(d)
           FROM test_t t_in
          WHERE t_in.a = t.a
            AND t_in.b = t.b) AS total
  FROM test_t t
 GROUP BY a, b, c
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...