Предложение GROUP BY используется совместно с SELECT для организации одинаковых данных в группы. Предложение GROUP BY следует после условия WHERE в операторе SELECT и предшествует ORDER BY.
Базовый синтаксис в GROUP BY показан в следующем блоке кода. Предложение GROUP BY должно следовать условиям в предложении WHERE и должно предшествовать ORDER BY, если он используется.
SELECT column1, column2 FROM table_name WHERE [ conditions ] GROUP BY column1, column2 ORDER BY column1, column2
Рассмотрим таблицу CUSTOMERS, в котором присутствуют следующие записи:
+----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Maxim | 35 | Moscow | 21000.00 | | 2 | AndreyEx | 38 | Krasnodar | 55500.00 | | 3 | Oleg | 33 | Rostov | 34000.00 | | 4 | Masha | 35 | Moscow | 31500.00 | | 5 | Ruslan | 34 | Omsk | 43000.00 | | 6 | Dima | 32 | SP | 45000.00 | | 7 | Roma | 34 | SP | 10000.00 | +----+----------+-----+-----------+----------+
Если вы хотите знать общую сумму заработной платы каждого клиента, то запрос с GROUP BY будет выглядеть следующим образом.
SQL> SELECT NAME, SUM(SALARY) FROM CUSTOMERS GROUP BY NAME;
Это произведет следующий результат:
+----+----------+----------+ | ID | NAME | SALARY | +----+----------+----------+ | 2 | AndreyEx | 55500.00 | | 6 | Dima | 45000.00 | | 4 | Masha | 31500.00 | | 1 | Maxim | 21000.00 | | 3 | Oleg | 34000.00 | | 7 | Roma | 10000.00 | | 5 | Ruslan | 43000.00 | +----+----------+----------+
Теперь, давайте посмотрим на таблицу CUSTOMERS, которая имеет следующие записи с повторяющимися именами:
+----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | AndreyEx | 35 | Moscow | 21000.00 | | 2 | AndreyEx | 38 | Krasnodar | 55500.00 | | 3 | Masha | 33 | Rostov | 34000.00 | | 4 | Masha | 35 | Moscow | 31500.00 | | 5 | Dima | 34 | Omsk | 43000.00 | | 6 | Dima | 32 | SP | 45000.00 | | 7 | Roma | 34 | SP | 10000.00 | +----+----------+-----+-----------+----------+
Теперь же, если вы хотите знать, общую сумму заработной платы по каждому клиенту, то запрос GROUP BY будет выглядеть следующим образом:
SQL> SELECT NAME, SUM(SALARY) FROM CUSTOMERS GROUP BY NAME;
Это произведет следующий результат:
+----+----------+----------+ | ID | NAME | SALARY | +----+----------+----------+ | 2 | AndreyEx | 76500.00 | | 4 | Masha | 65500.00 | | 6 | Dima | 88000.00 | | 7 | Roma | 10000.00 | +----+----------+----------+