PostgreSQL - заказ с использованием массивов. Могу ли я создать массив динамически? - PullRequest
0 голосов
/ 18 марта 2012

Я использую PostgreSQL 9.1.13

Вот что я сделал до сих пор:

/* First Array ==> SELECT raggruppamento FROM ok_filiali GROUP BY raggruppamento ORDER by count(raggruppamento) DESC */
/* Second Array ==> SELECT banker FROM ok_filiali GROUP BY banker ORDER by count(banker) DESC */

SELECT mandato, raggruppamento, banker
FROM ok_filiali
ORDER BY
idx(array['MI','FI','BS','RM','BO','TO','GE','*','PD','PR'], ok_filiali.raggruppamento), 
idx(array['120','MF','28','921','30','29','56','38','76','33', '27', '8037', '5038', '173', '5984', '45', '104', '46', 
    '84', '284', '176', '5311', '209', '248', '5138', '5064', '325', 
    '171', '348', '255', '274', '373', '5915', '318', '5076'], ok_filiali.banker)

На данный момент я использовал вышеупомянутые запросы и создал вручную 2массивы.

Что мне нужно сделать, это динамически создать 2 массива, используемых для Order By (используя непосредственно 2 запроса)

Возможно ли это сделать?

Спасибо

1 Ответ

3 голосов
/ 18 марта 2012

Если я правильно понимаю, ваша цель - отсортировать результаты по частоте появления определенных значений. Это проще сделать с помощью оконных функций

SELECT mandato, raggruppamento, banker, 
    COUNT(*) OVER (PARTITION BY raggruppamento) AS order1.
    COUNT(*) OVER (PARTITION BY banker) AS order2
FROM ok_filiali
ORDER BY order1 DESC, order2 DESC;
...