Формулировка вопроса нуждается в улучшении, я не уверен, как его точно описать.
Учитывая таблицу 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
, использованный сам по себе, приведет к сжатию результата в одну строку на имя.