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


то sum() вычисляется 4 раза или 2?
насколько помню, там нет возможности сохранить в переменную прямо в запросе "var := sum(x)"
...
Рейтинг: 0 / 0
sum(X) / sum(Y)
    #40025081
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
sum(X) / sum(Y)
    #40025086
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так не удобно. Там много столбов всяких. Все переносить потом.
Maxim Boguk
если не уверенны как оно внутри устроенно

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

секрет да?


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


--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
sum(X) / sum(Y)
    #40025126
milenium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверка обязательна, что Y != 0 , SUM(Y) != 0, если пишете X/Y, SUM(X)/SUM(Y).
...
Рейтинг: 0 / 0
sum(X) / sum(Y)
    #40025130
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
sum(X) / sum(Y)
    #40025209
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster, эммм... А как это может быть одинаково с разным кол-вом столбов?
в последней строке 6 столбов агрегируются... Как это может быть == одному??
...
Рейтинг: 0 / 0
sum(X) / sum(Y)
    #40025213
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78,

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


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

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

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

Код: 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
sum(X) / sum(Y)
    #40025415
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
господа, а почему
Код: sql
1.
SELECT sum(x) + NULL


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


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


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


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


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



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

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


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