Я бы просто использовал 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;