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