powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Аналитика в Pg
25 сообщений из 34, страница 1 из 2
Аналитика в Pg
    #35242542
bege231
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Перехожу с Oracle на PostgreSql .
Просто любопытно - есть ли в pg что-либо похожее на аналитические функции Oraclе?
Никакой информации в описании нет :-(
но может кто знает или пытался как-то реализовать?
...
Рейтинг: 0 / 0
Аналитика в Pg
    #35242773
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть такие функции: Aggregate Functions for Statistics
...
Рейтинг: 0 / 0
Аналитика в Pg
    #35242832
ChameLe0n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нету таких функций..
...
Рейтинг: 0 / 0
Аналитика в Pg
    #35242954
bege231
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Аналитических, это вида - dense_rank() over (partition by ... )
Это чтоб в запросе без group by посчитать можно было сумму по группе накопительно , и отсортировать по этой накопительной , что-то в этом роде :-)
В pg в какую сторону надо копать? Ужасно ведь неохота одно и тоже несколько раз собирать :-(
Может есть все-таки что-то ?
...
Рейтинг: 0 / 0
Аналитика в Pg
    #35243075
бухарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
какая аналитика, даже ROWNUM аналога пока нет
...
Рейтинг: 0 / 0
Аналитика в Pg
    #35243114
bege231
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или там посчитать сумму по каждой группе , и бросить ее (сумму) в каждую строку группы чтоб посчитать %ое соотношение . Ну вообщем, много еще чего придумать можно :-)
Но похоже ,действительно, одним запросом в PG не получится.
Если только функцией - а в ней сначала группировку по таблице , а потом по каждой группе выбирать опять !
=8-( ,)
...
Рейтинг: 0 / 0
Аналитика в Pg
    #35243142
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bege231Или там посчитать сумму по каждой группе , и бросить ее (сумму) в каждую строку группы чтоб посчитать %ое соотношение .self-join
...
Рейтинг: 0 / 0
Аналитика в Pg
    #35243237
bege231
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeXa NalBat bege231Или там посчитать сумму по каждой группе , и бросить ее (сумму) в каждую строку группы чтоб посчитать %ое соотношение .self-join
Ну тоже не совсем чтоб подходит . Да и таблички у меня не то что в example - Weather&Weather :-)
Все равно спасибо ! За волю к победе! :-)
Хотя, объединить первоначальную таблицу и ее же группировку - это мысль.
Поторопилась я, конечно, насчет функции в предыдущем своем посте .
Ну, буду привыкать быть проще! ;-)
...
Рейтинг: 0 / 0
Аналитика в Pg
    #35254863
Бабичев Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeXa NalBatself-joinв коррелированном скалярном подзапросе во фразе select.
...
Рейтинг: 0 / 0
Аналитика в Pg
    #35255401
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select a.*, b.total from t1 as a natural join ( select group_id, sum(value) as total from t1 group by group_id ) as b;

я имел в виду такое. это называется "коррелированным скалярным подзапросом во фразе select"?
...
Рейтинг: 0 / 0
Аналитика в Pg
    #35255508
bege231
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeXa NalBatselect a.*, b.total from t1 as a natural join ( select group_id, sum(value) as total from t1 group by group_id ) as b;

я имел в виду такое. это называется "коррелированным скалярным подзапросом во фразе select"?

А если , например, надо посчитать невязку с общей суммой по группе и бросить ее на максимальный элемент в группе?
Тут уж точно одним запросом не обойдешься в pg :(
Как считаете?
...
Рейтинг: 0 / 0
Аналитика в Pg
    #35255764
Бабичев Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bege231А если , например, надо посчитать невязку с общей суммой по группе и бросить ее на максимальный элемент в группе?
Тут уж точно одним запросом не обойдешься в pg :(
Как считаете?Смотря что понимать под "одним запросом". А вообще можно. Но нужно ли? Монстр ещё тот получится...
...
Рейтинг: 0 / 0
Аналитика в Pg
    #35255771
Бабичев Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeXa NalBatselect a.*, b.total from t1 as a natural join ( select group_id, sum(value) as total from t1 group by group_id ) as b;

я имел в виду такое. это называется "коррелированным скалярным подзапросом во фразе select"?Не-а, я имел ввиду немного другое:
Код: plaintext
1.
2.
Select a.*, 
       (select ...)
  from t1 as a ...
...
Рейтинг: 0 / 0
Аналитика в Pg
    #35255881
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bege231А если , например, надо посчитать невязку с общей суммой по группе и бросить ее на максимальный элемент в группе?что-то подзабыл математику, нагуглить быстро не получилось. по какой формуле и какому алгоритму это надо считать?

какой должен быть результат для таких исходных данных:
group_id, value
1, 3
1, 4
1, 4
2, 5
2, 6
...
Рейтинг: 0 / 0
Аналитика в Pg
    #35255990
bege231
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeXa NalBatчто-то подзабыл математику, нагуглить быстро не получилось. по какой формуле и какому алгоритму это надо считать?

какой должен быть результат для таких исходных данных:
group_id, value
1, 3
1, 4
1, 4
2, 5
2, 6
Пример :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
сумма  группа  оплата   value    по_группе  невязка + на максимальную   |     ИТОГ |       
--------------------------------------------------------------------------------------------------------------------------
 3 . 47         1            351        1 . 39      |               |   		 |       1 , 39    |
 3 . 47         1            376        1 . 56      |     3 . 37        |     + 0 . 10 	 |       1 , 66    |
 3 . 47         1            100        0 . 42      |               |                |       0 , 42    | 
 1 . 31         2            123 					          						 
 1 . 31         2            324 					          
...
Рейтинг: 0 / 0
Аналитика в Pg
    #35256012
bege231
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бабичев СергейНе-а, я имел ввиду немного другое:
Код: plaintext
1.
2.
Select a.*, 
       (select ...)
  from t1 as a ...

А тоже работает! Хотя и медленее чем join .
...
Рейтинг: 0 / 0
Аналитика в Pg
    #35256053
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bege231
Код: plaintext
1.
2.
3.
4.
сумма  группа  оплата   value    по_группе  невязка + на максимальную   |     ИТОГ |       
--------------------------------------------------------------------------------------------------------------------------
 3 . 47         1            351        1 . 39      |               |   		 |       1 , 39    |
 3 . 47         1            376        1 . 56      |     3 . 37        |     + 0 . 10 	 |       1 , 66    |
 3 . 47         1            100        0 . 42      |               |                |       0 , 42    |
не понял. исходные данные 1.39, 1.56, 0.42 - верно? 3.37=1.39+1.56+0.42 - верно? как посчитаны 3.47 и +0.10? "итог" отличается от "value" только для строки с максимальным value? поле "итог" и есть требуемый результат?
...
Рейтинг: 0 / 0
Аналитика в Pg
    #35256108
bege231
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeXa NalBat bege231
Код: plaintext
1.
2.
3.
4.
сумма  группа  оплата   value    по_группе  невязка + на максимальную   |     ИТОГ |       
--------------------------------------------------------------------------------------------------------------------------
 3 . 47         1        351      1 . 39      |          |     	 |       1 , 39    |
 3 . 47         1        376      1 . 56      |     3 . 37   |     + 0 . 10  |       1 , 66    |
 3 . 47         1        100      0 . 42      |          |           |       0 , 42    |
не понял. исходные данные 1.39, 1.56, 0.42 - верно? 3.37=1.39+1.56+0.42 - верно? как посчитаны 3.47 и +0.10? "итог" отличается от "value" только для строки с максимальным value? поле "итог" и есть требуемый результат?

1- value надо рассчитать в процентном соотношении - 3.47 * ( 351/(351+376+100))
2 - т.о. по группе получается общая сумма 3,37 (должно быть 3,47) , невязка - 0.10
3 - невязку прибавляем к максимальной ( max =376 , прибавляем .10 к 1.56 )
...
Рейтинг: 0 / 0
Аналитика в Pg
    #35256242
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bege231
Код: plaintext
1.
2.
3.
4.
сумма  группа  оплата   value    по_группе  невязка + на максимальную   |     ИТОГ |       
--------------------------------------------------------------------------------------------------------------------------
 3 . 47         1        351      1 . 39      |          |     	 |       1 , 39    |
 3 . 47         1        376      1 . 56      |     3 . 37   |     + 0 . 10  |       1 , 66    |
 3 . 47         1        100      0 . 42      |          |           |       0 , 42    |

1- value надо рассчитать в процентном соотношении - 3.47 * ( 351/(351+376+100))еще сильнее запутался. :-) какие колонки составляют входные данные?

3.47 * ( 351/(351+376+100)) ~= 1.47. не вижу 1.47 в приведенной вами таблице.
...
Рейтинг: 0 / 0
Аналитика в Pg
    #35256298
bege231
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Первоначальные колонки - сумма , группа , оплата


3.47 * ( 351/(351+376+100)) ~= 1.47. не вижу 1.47 в приведенной вами таблице.
1.39 и есть 1.47 :) Ошиблась чуть-чуть . Но вообще-то , 1.46 даже скорее .
Все равно невязка будет.
...
Рейтинг: 0 / 0
Аналитика в Pg
    #35256343
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bege2313.47 * ( 351/(351+376+100)) ~= 1.47. не вижу 1.47 в приведенной вами таблице.1.39 и есть 1.47 :) Ошиблась чуть-чуть .кто ошиблась? :) постгрес? 1.39 - входные данные? но вы не перечислили value в списке входных данных "сумма , группа , оплата". не понимаю. :-( откуда взялось 1.39?

bege231Но вообще-то , 1.46 даже скорее .мой калькулятор считает 3.47 * ( 351/(351+376+100)) = 1.4727569528416. это скорее 1.47, чем 1.46.
...
Рейтинг: 0 / 0
Аналитика в Pg
    #35256381
bege231
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeXa NalBat bege231 3.47 * ( 351/(351+376+100)) ~= 1.47. не вижу 1.47 в приведенной вами таблице.1.39 и есть 1.47 :) Ошиблась чуть-чуть .кто ошиблась? :) постгрес? 1.39 - входные данные? но вы не перечислили value в списке входных данных "сумма , группа , оплата". не понимаю. :-( откуда взялось 1.39?

bege231Но вообще-то , 1.46 даже скорее .мой калькулятор считает 3.47 * ( 351/(351+376+100)) = 1.4727569528416. это скорее 1.47, чем 1.46.
Я ошиблась . Пример был рассчитан мной ! и 1.39 собственноручно посчитала.
И value не входит в исходные данные , а тоже рассчитывается .
А если 351/(351+376+100) округлить до 2х знаков ?
Ну пусть уже будет 1.47 . Это что-то меняет?
...
Рейтинг: 0 / 0
Аналитика в Pg
    #35256404
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bege231Это что-то меняет?не меняет. я не разбираюсь в данной предметной области, из ваших объяснений понять задачу не могу. умываю руки.
...
Рейтинг: 0 / 0
Аналитика в Pg
    #35256526
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeXa NalBat 12:51по какой формуле и какому алгоритму это надо считать? bege231 14:57А если 351/(351+376+100) округлить до 2х знаков ?лишь через два часа после моего вопроса вы проронили слово "округлить". для вас это наверняка очевидно, но например я и понятия не имел, что в этой задаче используется округление.

знаете, что правильно сформулированная задача - уже половина решения? почему вы не смогли четко сформулировать задачу?

- дана таблица из трех полей (сумма, группа, оплата)
- для каждой строки приближенно вычислить с округлением до заданной точности 10**N поле value по формуле trunc( сумма*оплата/(sum_по_группе(оплата)), N )
- для каждой группы вычислить невязку по формуле сумма-sum_по_группе(value)
- для каждой группы добавить невязку группы к максимальному value в группе
- вывести четыре поля (сумма, группа, оплата, value)
...
Рейтинг: 0 / 0
Аналитика в Pg
    #35256638
bege231
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeXa NalBat LeXa NalBat 12:51по какой формуле и какому алгоритму это надо считать? bege231 14:57А если 351/(351+376+100) округлить до 2х знаков ?лишь через два часа после моего вопроса вы проронили слово "округлить". для вас это наверняка очевидно, но например я и понятия не имел, что в этой задаче используется округление.

знаете, что правильно сформулированная задача - уже половина решения? почему вы не смогли четко сформулировать задачу?

- дана таблица из трех полей (сумма, группа, оплата)
- для каждой строки приближенно вычислить с округлением до заданной точности 10**N поле value по формуле trunc( сумма*оплата/(sum_по_группе(оплата)), N )
- для каждой группы вычислить невязку по формуле сумма-sum_по_группе(value)
- для каждой группы добавить невязку группы к максимальному value в группе
- вывести четыре поля (сумма, группа, оплата, value)

Округление, на мой взгляд как раз наименее значимый пункт решения задачи.
Меня интересует написание такого рода запросов как класса задач, что ли. А не конкретного алгоритма. Для того чтобы написать подобное для Oracle, человеку прочитавшему Т.Кайта, понадобилось бы не больше получаса. А в pg мне трудно пока придумать как решить что-то подобное просто и понятно. Надеялась что кто-нибудь сталкивался с похожими задачами расчетов.
Вообщем, приношу свои извинения!
...
Рейтинг: 0 / 0
25 сообщений из 34, страница 1 из 2
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Аналитика в Pg
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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