Читать в оригинале

<< ПредыдущаяОглавлениеСледующая >>


2.2.6 Встроенные функции и группировка

Полезность встроенных функций увеличивает тот факт, что их мож­но применять к группам строк данных. Например, следующий оператор подсчитывает количество художников каждой национальности:

SELECT Nationality, COUNT(*)
FROM ARTIST
GROUP BY Nationality;

Результат будет таким:

Ключевое слово GROUP BY предписывает СУБД отсортировать табли­цу по указанному столбцу, а затем применить встроенные функции к груп­пам строк, имеющим одинаковые значения данного столбца. При исполь­зовании GROUP BY имя столбца, по которому производится группиров­ка, и встроенные функции могут сосуществовать в предложении SELECT. Это единственный случай, когда имя столбца может появляться вместе со встроенными функциями.

Далее ограничить множество выдаваемых результатов можно, приме­няя к формируемым группам различные условия. Например, если нас ин­тересуют только те группы, в которых имеется более одной записи, мы могли бы написать следующее:

SELECT Nationality, COUNT(*) FROM ARTIST
GROUP BY Nationality
HAVING COUNT(*)>1;

Результатом этого оператора будет следующая таблица:

Us          3
French    2

 

Вместе с ключевым словом GROUP BY можно использовать и предло­жение WHERE. Однако здесь имеет место неоднозначность. Если условие в предложении WHERE применяется до формирования групп, результат будет иным, чем когда это условие применяется к уже сформированным группам. Для устранения этой неоднозначности стандарт SQL устанавли­вает, что в случаях, когда предложения WHERE и GROUP BY исполь­зуются одновременно, первым должно применяться условие, записанное в предложении WHERE. Рассмотрим, например, следующий оператор:

SELECT Nationality, COUNT(*) FROM ARTIST
WHERE ArtistID < 10
GROUP BY Nationality
HAVING C0UNT(*)>1;

При выполнении данного оператора сначала применяется условие из предложения WHERE, которое отбирает художников, чей идентификатор меньше 10. Затем, после формирования групп, применяется условие из предложения HAVING. Результат имеет следующий вид:

 

US             2

 



<< ПредыдущаяОглавлениеСледующая >>