Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / sum(X) / sum(Y) / 18 сообщений из 18, страница 1 из 1
06.12.2020, 20:43
    #40025076
tip78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sum(X) / sum(Y)
всем привет
у постгри есть такое понятие, как кэширование уже посчитанного?
если запрос:
Код: sql
1.
SELECT sum(x), sum(y), sum(x) / sum(y)


то sum() вычисляется 4 раза или 2?
насколько помню, там нет возможности сохранить в переменную прямо в запросе "var := sum(x)"
...
Рейтинг: 0 / 0
06.12.2020, 21:02
    #40025081
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sum(X) / sum(Y)
tip78
всем привет
у постгри есть такое понятие, как кэширование уже посчитанного?
если запрос:
Код: sql
1.
SELECT sum(x), sum(y), sum(x) / sum(y)


то sum() вычисляется 4 раза или 2?
насколько помню, там нет возможности сохранить в переменную прямо в запросе "var := sum(x)"


ну так перепишите в виде
Код: plsql
1.
select x,y, x/y from (select sum(x) as x, sum(y) as y from something)  


если не уверенны как оно внутри устроенно


--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
06.12.2020, 21:27
    #40025086
tip78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sum(X) / sum(Y)
так не удобно. Там много столбов всяких. Все переносить потом.
Maxim Boguk
если не уверенны как оно внутри устроенно

секрет да?
...
Рейтинг: 0 / 0
06.12.2020, 23:47
    #40025105
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sum(X) / sum(Y)
tip78
так не удобно. Там много столбов всяких. Все переносить потом.
Maxim Boguk
если не уверенны как оно внутри устроенно

секрет да?


не секрет, но это надо в потроха кода закапываться для ответа на вопрос.


--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
07.12.2020, 03:28
    #40025126
milenium
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sum(X) / sum(Y)
Проверка обязательна, что Y != 0 , SUM(Y) != 0, если пишете X/Y, SUM(X)/SUM(Y).
...
Рейтинг: 0 / 0
07.12.2020, 06:10
    #40025130
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sum(X) / sum(Y)
tip78,

Примерно одинаковое время выполнения на 2300к записях у
Код: sql
1.
2.
3.
4.
select sum(x) ...
select sum(x), sum(y) ...
select sum(x), sum(y), sum(x)/sum(y)  ...
select sum(x), sum(y), sum(z), sum(a), sum(b), sum(c), sum(x)/sum(y)  ...



Забей.
upd. Я протупил, это на оракле.
...
Рейтинг: 0 / 0
07.12.2020, 13:12
    #40025209
tip78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sum(X) / sum(Y)
crutchmaster, эммм... А как это может быть одинаково с разным кол-вом столбов?
в последней строке 6 столбов агрегируются... Как это может быть == одному??
...
Рейтинг: 0 / 0
07.12.2020, 13:15
    #40025213
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sum(X) / sum(Y)
tip78,

Считать sum намного проще, чем делать выборку. Настолько, что процесс подсчёта sum теряется на этом фоне.
...
Рейтинг: 0 / 0
07.12.2020, 15:01
    #40025273
tip78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sum(X) / sum(Y)
crutchmaster, ну тогда стартовый пост теряет смысл заморочки
можно было сразу это написать )
...
Рейтинг: 0 / 0
07.12.2020, 15:10
    #40025279
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sum(X) / sum(Y)
tip78
crutchmaster, ну тогда стартовый пост теряет смысл заморочки
можно было сразу это написать )


на самом деле не теряет... это sum() агрегат дешевый...
а бывают очень дорогие агрегатные функции и там это вопрос вполне себе обоснован...
Вот например медиана ( https://wiki.postgresql.org/wiki/Aggregate_Median ) нифига не дешевая...

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
07.12.2020, 16:59
    #40025344
tip78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sum(X) / sum(Y)
цифра вычисленного sum(x) по-любому лежит в ячейке памяти
и даже во время отправки объекта с результатами наружу, там будет указатель на эту ячейку
точно также можно было бы и взять из этой ячейки вычисленную цифру для соседнего sum(x)...
тут нет ничего сложного, элементарная и логичная операция
...
Рейтинг: 0 / 0
07.12.2020, 17:02
    #40025347
tip78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sum(X) / sum(Y)
Maxim Boguk
нифига не дешевая...

ну значит вот её можно воткнуть в запрос crutchmaster
...
Рейтинг: 0 / 0
07.12.2020, 17:40
    #40025360
Guzya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sum(X) / sum(Y)
Если я правильно понял:
Изменчивость=постоянная
значит результат вычисляется один раз для каждого входного значения

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
postgres=# \df+ pg_catalog.sum()
                                                                                                           Список функций
   Схема    | Имя | Тип данных результата | Типы данных аргументов | Тип  | Изменчивость | Параллельность | Владелец | Безопасность | Права доступа |   Язык   |  Исходный код   |                     Описание                     
------------+-----+-----------------------+------------------------+------+--------------+----------------+----------+--------------+---------------+----------+-----------------+--------------------------------------------------
 pg_catalog | sum | numeric               | bigint                 | агр. | постоянная   | безопасная     | postgres | вызывающего  |               | internal | aggregate_dummy | sum as numeric across all bigint input values
 pg_catalog | sum | double precision      | double precision       | агр. | постоянная   | безопасная     | postgres | вызывающего  |               | internal | aggregate_dummy | sum as float8 across all float8 input values
 pg_catalog | sum | bigint                | integer                | агр. | постоянная   | безопасная     | postgres | вызывающего  |               | internal | aggregate_dummy | sum as bigint across all integer input values
 pg_catalog | sum | interval              | interval               | агр. | постоянная   | безопасная     | postgres | вызывающего  |               | internal | aggregate_dummy | sum as interval across all interval input values
 pg_catalog | sum | money                 | money                  | агр. | постоянная   | безопасная     | postgres | вызывающего  |               | internal | aggregate_dummy | sum as money across all money input values
 pg_catalog | sum | numeric               | numeric                | агр. | постоянная   | безопасная     | postgres | вызывающего  |               | internal | aggregate_dummy | sum as numeric across all numeric input values
 pg_catalog | sum | real                  | real                   | агр. | постоянная   | безопасная     | postgres | вызывающего  |               | internal | aggregate_dummy | sum as float4 across all float4 input values
 pg_catalog | sum | bigint                | smallint               | агр. | постоянная   | безопасная     | postgres | вызывающего  |               | internal | aggregate_dummy | sum as bigint across all smallint input values
(8 строк)
...
Рейтинг: 0 / 0
07.12.2020, 20:26
    #40025415
tip78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sum(X) / sum(Y)
господа, а почему
Код: sql
1.
SELECT sum(x) + NULL


даёт в итоге NULL?
без coalesce() никак чтоли?
...
Рейтинг: 0 / 0
07.12.2020, 21:10
    #40025421
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sum(X) / sum(Y)
tip78
господа, а почему
Код: sql
1.
SELECT sum(x) + NULL


даёт в итоге NULL?
без coalesce() никак чтоли?


потому что "что угодно" "любой оператор" NULL - есть NULL по SQL стандарту
NULL это не НОЛЬ.


--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
08.12.2020, 13:04
    #40025559
tip78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sum(X) / sum(Y)
да ясен-красен, но это же не операция умножения, и не конкатенация
мог бы и sum(x) оставить
...
Рейтинг: 0 / 0
08.12.2020, 13:44
    #40025574
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sum(X) / sum(Y)
tip78
да ясен-красен, но это же не операция умножения, и не конкатенация
мог бы и sum(x) оставить


Есть ANSI SQL стандарт и все нормальные базы его стараются придерживаться.



--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
08.12.2020, 14:25
    #40025593
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sum(X) / sum(Y)
tip78
да ясен-красен, но это же не операция умножения, и не конкатенация

А в чём разница с умножением или конкатенацией?
К 100 прибавляем неизвестность, почему должно получиться вообще хоть что-то, кроме как другая неизвестность?
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / sum(X) / sum(Y) / 18 сообщений из 18, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]