Полезность встроенных функций увеличивает тот факт, что их можно применять к группам строк данных. Например, следующий оператор подсчитывает количество художников каждой национальности:
SELECT Nationality, COUNT(*)
FROM ARTIST
GROUP BY Nationality;
Результат будет таким:
Us з
French 2
Russian 1
Spanish 1
German 1
Ключевое слово GROUPBY предписывает СУБД отсортировать таблицу по указанному столбцу, а затем применить встроенные функции к группам строк, имеющим одинаковые значения данного столбца. При использовании GROUP BY имя столбца, по которому производится группировка, и встроенные функции могут сосуществовать в предложении SELECT. Это единственный случай, когда имя столбца может появляться вместе со встроенными функциями.
Далее ограничить множество выдаваемых результатов можно, применяя к формируемым группам различные условия. Например, если нас интересуют только те группы, в которых имеется более одной записи, мы могли бы написать следующее:
SELECT Nationality, COUNT(*) FROM ARTIST GROUP BY Nationality HAVING COUNT(*)>1;
Результатом этого оператора будет следующая таблица:
Us з
French 2
Вместе с ключевым словом GROUPBY можно использовать и предложение WHERE. Однако здесь имеет место неоднозначность. Если условие в предложении WHERE применяется до формирования групп, результат будет иным, чем когда это условие применяется к уже сформированным группам. Для устранения этой неоднозначности стандарт SQL устанавливает, что в случаях, когда предложения WHERE и GROUP BY используются одновременно, первым должно применяться условие, записанное в предложении WHERE. Рассмотрим, например, следующий оператор:
предыдущаяследующая