Предложение GROUP BY |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Пусть теперь мы хотим получить количество компьютеров, подходящих по RAM к каждому типу операционных систем. Тогда мы можем написать следующий запрос:
В результате выполнения запроса получим:
Здесь мы дублируем оператор CASE в предложении SELECT, чтобы получить столбец с наименованием операционной системы. Использование оператора CASE в предложении GROUP BY позволяет в рамках одного запроса выполнять группировку по разному числу столбцов. Рассмотрим, например, следующую задачу. Для каждой комбинации скорости процессора и объема жесткого диска определить среднюю цену ПК. Для ПК со скоростью процессора менее 600 выполнять группировку только по скорости процессора. Сначала для сравнения приведем результаты группировки по одному (speed) и двум столбцам (speed, hd) соответственно.
Поскольку в каждой группе значения hd совпадают, можно max(hd) и hd использовать равноправно. Теперь дадим решение нашей задачи:
Когда speed >= 600, выполняется группировка по столбцам speed, hd. В противном случае группировка выглядит так:
Хотя явная группировка - GROUP BY speed, NULL - будет вызывать ошибку. |