Oracle SQL: обновите таблицу с SUM OVER PARTITION - PullRequest
0 голосов
/ 04 сентября 2018

Я пытался сделать следующее:

CREATE TABLE T_example
(category number(1,0),
amount number(4,0),
amount2 number(4,0))

INSERT INTO T_example VALUES (1,20,40);
INSERT INTO T_example VALUES (1,30,40);
INSERT INTO T_example VALUES (2,5,60);
INSERT INTO T_example VALUES (2,15,60);
INSERT INTO T_example VALUES (2,30,60);

Как видите, все строки содержат одинаковое количество2 в своей категории. Теперь я хочу распределить сумму2 внутри каждой категории в соответствии с распределением суммы по категории.

UPDATE T_example
SET amount2 = amount2 * amount / SUM(amount) OVER (PARTITION BY category ORDER BY category); 

Я хочу получить:

category - amount - amount2
1 - 20 - 16
1 - 30 - 24
2 - 5 - 6
2 - 15 - 18
2 - 30 - 36

Но код не работает. Там написано:

00934.00000 - «групповая функция здесь не разрешена»

Можете ли вы сказать мне, где я ошибаюсь?

1 Ответ

0 голосов
/ 04 сентября 2018

Я думаю, что ниже будет работать для вас, связанный подзапрос

 UPDATE T_example t1
    SET t1.amount2 = (t1.amount*t1.amount2) / (

       select sum(amount) from -- from was missing
      T_example t2 where t2.category=t1.category
      group by category

            ); 

https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=e2c00fe7ad8866bb4a62f66b08133f95

CATEGORY    AMOUNT  AMOUNT2
1            20     16
1            30     24
2             5     6
2            15     18
2            30     36
...