|
Развернуть подитоги в столбцы
|
|||
---|---|---|---|
#18+
Если подобная тема была, подскажите пожалуйста, а то даже не понимаю, как гуглить. У меня есть таблица, в которой для каждого объекта CostBase есть пара десятков номеров счетов с суммами. Это выглядит примерно так Код: plaintext 1. 2. 3. 4. 5. 6. 7.
На выходе мне надо получить таблицу, где в строках также останутся CostBase и Cost, а разные Account будут в столбцах - то есть на один CostBase будет одна строка. Код: plaintext 1. 2. 3. 4.
Для этого я написал функцию, которая возвращает по заданным в качестве аргументам CostBase и Account сумму по Cost Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Далее я получаю нужный мне результат через запрос Код: plsql 1. 2. 3. 4. 5. 6. 7.
Понятно, что всё это работает довольно-таки медленно и меня не покидает ощущение, что помимо решения в лоб есть варианты лучше. Подскажите, я выбрал оптимальный подход и дальше играть с индексами и materialized veiw или всё сделано задом наперед? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2020, 07:09 |
|
Развернуть подитоги в столбцы
|
|||
---|---|---|---|
#18+
ArtHome, Если вам нужна скорость - забудьте маленькие хранимые процедуры и пишите в один запрос (легко можно получить ускорение на пару порядков) А запрос уже можно оптимизировать по разному. overhead на 1 вызов функции в pg очень дорогой да и оптимизировать это не возможно в отличии от запроса. вам надо обычный group by + https://www.postgresql.org/docs/13/tablefunc.html для pivot результата -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2020, 10:08 |
|
|
start [/forum/topic.php?fid=53&msg=40003738&tid=1994448]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
270ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 18ms |
total: | 388ms |
0 / 0 |