→ Пошук по сайту       Увійти / Зареєструватися
Знання SQL - язык запросов

DML: Групировка данных

Группировка данных в операторе SELECT осуществляется с помощью ключевого слова GROUP BY и ключевого слова HAVING, с помощью которого задаются условия разбиения записей на группы.

GROUP BY неразрывно связано с агрегирующими функциями, без них оно практически не используется. GROUP BY разделяет таблицу на группы, а агрегирующая функция вычисляет для каждой из них итоговое значение. Определим для примера количество книг каждего издательства в нашей базе данных:

SELECT publishers.publisher, count(titles.title)

       FROM titles,publishers

       WHERE titles.pub_id=publishers.pub_id

       GROUP BY publisher;
Kлючевое слово HAVING работает следующим образом: сначала GROUP BY разбивает строки на группы, затем на полученные наборы накладываются условия HAVING. Например, устраним из предыдущего запроса те издательства, которые имеют только одну книгу:
SELECT publishers.publisher, count(titles.title)

       FROM titles,publishers

       WHERE titles.pub_id=publishers.pub_id

       GROUP BY publisher

       HAVING COUNT(*)>1;
Другой вариант использования HAVING - включить в результат только те издательтва, название которых оканчивается на подстроку "Press":
SELECT publishers.publisher, count(titles.title)

       FROM titles,publishers

       WHERE titles.pub_id=publishers.pub_id

       GROUP BY publisher

       HAVING publisher LIKE '%Press';
В чем различие между двумя этими вариантами использования HAVING? Во втором варианте условие отбора записей мы могли поместить в раздел ключевого слова WHERE, в первом же варианте этого сделать не удасться, поскольку WHERE не допускает использования агрегирующих функций.

загрузка...
Сторінки, близькі за змістом