Посгре разделить и сгруппировать где диапазон верный? - PullRequest
1 голос
/ 13 января 2020

У меня есть таблица, которую я хотел бы сгруппировать по диапазонам, и показать, сколько инсталляторов имеют установки, попадающие в указанный c диапазон. Для этого примера диапазоны [1-3] и [4-5]

Installer Size
Ben       5
Ben       5
Sam       4
Sam       1
Ben       1
Sam       2
Sam       NULL

Вот то, что я хотел бы видеть, используя over partition by и count(*):

Installer  CounOf[1-3]  CountOf[4-5]
Ben        1              2
Sam        2              1

Как бы я написал этот запрос?

1 Ответ

2 голосов
/ 13 января 2020

Для этой задачи вам не нужны оконные функции (функции, использующие предложение over()). Вместо этого вы можете использовать условное агрегирование; Для этого пригодится предложение Postgres 'filter():

select 
    installer,
    count(*) filter(where size between 1 and 3) count_of_1_3,
    count(*) filter(where size between 4 and 5) count_of_4_5
from mytable
group by installer
order by installer

Демонстрация на DB Fiddle :

installer | count_of_1_3 | count_of_4_5
:-------- | -----------: | -----------:
Ben       |            1 |            2
Sam       |            2 |            1
...