SQL: сгруппировать и показать примеры другого поля - PullRequest
0 голосов
/ 12 апреля 2020

Допустим, у меня есть таблица presto sql, как показано ниже:

Lunch choice | Person
Pasta | John
Burger | David
Pasta | Bob
Pizza | Lindet
Pasta | Hillary

Я хочу сгруппировать по «выбору обеда», показать количество отдельных людей, которые выбирают еду, и привести примеры до двух из них (неважно, какие из них), а именно:

Lunch choice | count | example
Pasta | 3 | John, Bob
Burger | 1 | David
Pizza | 1 | Lindet

Я борюсь с частью примера (отчетливый счет, очевидно, очень прост). Кто-нибудь с идеями?

Ответы [ 2 ]

2 голосов
/ 12 апреля 2020

Я бы просто использовал min() и max():

select lunch, count(*), min(person), nullif(max(person), min(person))
from t
group by lunch;

Если вы хотите все из них, то вы можете использовать array_agg():

select lunch, count(*), array_agg(person)
from t
group by lunch;

Вы можете затем расширьте это значение, используя slice(), чтобы получить только два значения:

select lunch, count(*), slice(array_agg(person), 1, 2)
from t
group by lunch;
0 голосов
/ 12 апреля 2020

Для отсутствующей части дубликата - вам нужно найти вторую запятую, используя strpos, а затем читать только символы до этой точки.

что-то вроде:

select count(*)   --other columns etc..
, substr([comma separated names], 1, strpos([comma separated names], ',', 2))

Если он становится немного нечитаемым со всеми этими вложенными формулами, разбейте его на строки с отступом или используйте cte.

...