PLPGSQL - хранимая процедура для получения набора строк с количеством - PullRequest
0 голосов
/ 16 октября 2019

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

Мне нужна хранимая процедура, использующая язык PLPGSQL, который будет возвращать таблицу (SET OF RECORDS), содержащую количество результатов top 2 и bottom 2 из my_table.

Например,:

my_table

id       value
1          a
2          a
3          a
4          b
5          b
6          c
7          c
8          e
9          f
10         g
11         g
12         g
13         g
14         h
15         h

Возвращает:

count           value
  4               g
  3               a
  1               e
  1               f

Спасибо

1 Ответ

2 голосов
/ 16 октября 2019

Вы можете использовать оконные функции с объединением

select v.value, v.cnt
from (select value, count(*) as cnt,
             row_number() over (order by count(*) desc) as seqnum_desc,
             row_number() over (order by count(*) asc) as seqnum_asc
      from t
      group by value
     ) v
where seqnum_desc <= 2 or seqnum_asc <= 2;

Примечание: В случае связей - особенно вероятно, в нижней части - это возвращает произвольные значения с одинаковым количеством. Вы можете настроить это с помощью rank() или dense_rank(), в зависимости от того, что вы хотите в этом случае.

...