В SQL (PSQL), как группировать по разделам строк (как сделать вложенную группу по)? - PullRequest
0 голосов
/ 24 мая 2018

Формулировка вопроса нуждается в улучшении, я не уверен, как его точно описать.

Учитывая таблицу foo, подсчитайте, сколько языков может говорить каждый человек, сгруппированных по формату.Пример:

 name |  format  |  language
------+----------+------------
 abe  | compiled | golang
 abe  | compiled | c
 abe  | scripted | javascript
 jon  | scripted | ruby
 jon  | scripted | javascript
 wut  | spoken   | english
(6 rows)

Результат:

 name |  format  |  count
------+----------+------------
 abe  | compiled | 2
 abe  | scripted | 1
 jon  | scripted | 2
 wut  | spoken   | 1

Пример данных можно создать с помощью:

create table foo
(
  name varchar(40) not null,
  format varchar(40) not null,
  language varchar(40) not null
);
insert into foo
values
  ( 'abe', 'compiled', 'golang' ),
  ( 'abe', 'compiled', 'c' ),
  ( 'abe', 'scripted', 'javascript' ),
  ( 'jon', 'scripted', 'ruby' ),
  ( 'jon', 'scripted', 'javascript' ),
  ( 'wut', 'spoken', 'english' )
;

Я пробовал использовать функции управления окнами count(*) over (partition by format), но этоне сдавливает строки, и для него потребуется вложенное окно по имени, а затем по формату, тогда как count(*) ... group by name, использованный сам по себе, приведет к сжатию результата в одну строку на имя.

1 Ответ

0 голосов
/ 24 мая 2018

Использование group by предложение:

select name, format, count(*)
from foo
group by name, format;

Однако, если вы хотите использовать функцию window , вы также можете сделать это:

select distinct name, format, 
       count(*) over (partition by name, format)
from foo f;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...