Группировка (GROUP BY)

Вы можете группировать результаты запроса SELECT на основе одного или нескольких столбцов, используя SQL оператор GROUP BY. После оператора GROUP BY нужно указать имя столбца, который, возможно, содержит повторяющиеся имена. Выполнив группировку, у вас будет только одна запись для каждого значения указанного в столбце. Как правило, вы можете использовать определенные агрегирующие функции SQL, чтобы отобразить в других столбцах сумму, максимум, минимум или количество сгруппированных записей.

В утверждении SELECT выражение GROUP BY следует за условием WHERE и предшествует выражению ORDER BY.

Предположим, у нас есть таблица awards победителей по версии FIFA Golden Ball и мы хотим посчитать количество наград у каждого игрока:

year player
2010 Lionel Messi
2011 Lionel Messi
2012 Lionel Messi
2013 Cristiano Ronaldo
2014 Cristiano Ronaldo

Мы хотим посчитать количество наград для каждого игрока и с этой целью будем использовать группировку. В SQL группировку можно выполнить следующим образом: 

SELECT playerCOUNT(player) FROM awards GROUP BY player;

это эквивалентно следующему запросу QueryDSL:

selectFrom(awards)
    .groupBy(awards.player)
    .list(awards.player, awards.player.count());

Получим результат: 

Lionel Messi 3
Cristiano Ronaldo 2