Пример. Количество изданных книг автора. (Запрос Qual-Book-Author)
SELECT
au_id,
COUNT(*) AS "Кол-во книг"
FROM Title_authors
GROUP BY au_id
ORDER BY 2 DESC;
Пример. Расчет среднего – продажи по категориям. (Запрос COUNT-AVG)
SELECT
type,
SUM(sales) AS "Сумма продаж",
COUNT(sales) AS "COUNT(sales)",
COUNT(*) AS "COUNT(*)",
SUM(sales)/COUNT(sales) AS "SUM/COUNT(sales)",
SUM(sales)/COUNT(*) AS "SUM/COUNT(*)",
AVG(sales) AS "Средее"
FROM Title
GROUP BY type;
Задание.
1) Посчитать по категориям:
- объем продаж
- средний размер продаж
- количество изданий, вошедших в категорию.
Не учитывать книги дешевле 15 евро. Упорядочить по уменьшению продаж.
2) Перечислить в убывающем порядке количество изданий с группировкой по издателям и категориям.
3) Рассчитать средние продажи с разбивкой по цене издания в порядке ее уменьшения.
Контрольное задание 1.
Перечислить количество изданий с группированием по объемам продаж:
-менее 1 тыс.
- 1 тыс. – 10 тыс.
- 10 тыс. – 100 тыс.
- 100 тыс. – 1 млн.
- свыше 1 млн.
Примечание. Если в запросе предложение GROUP BY применяется без агрегатной функции, то запрос выполняется также как и предложение DISTINCT.
SELECT type FROM title GROUP BY type SELECT DISTINCT type FROM title
Предложение HAVING накладывает ограничение на предложение GROUP BY аналогично тому, как предложение WHERE исполняется командой SELECT. WHERE ограничивает число строк, отображаемых командой SELECT, HAVING ограничивает число групп, формируемых предложением GROUP BY. Предложение WHERE выполняется до группировки, предложение HAVING – после. Предложение HAVING может содержать агрегатные функции.
Порядок выполнения:
- предложение WHERE фильтрует строки, полученные в результате выполнения FROM и JOIN;
- предложение GROUP BY группирует полученный результат;
- предложение HAVING фильтрует строки, полученные в результате группирования.
Таким образом, предложение HAVING обрабатывает строки групп.
Пример. Перечислить авторов, издавших не менее 3-х книг. (Запрос Author-Book-Condition)
SELECT
au_id,
COUNT(*) AS "Кол-во книг"
FROM Title_authors
GROUP BY au_id
HAVING COUNT(*)>=3;
Задание.
1) Перечислить категории книги, средний доход от которых превышает 1 млн. Указать количество книг в категории.
2) Сгруппировать по издателям и категориям опубликованные книги. Отразить количество книг и категории, в которых эта величина больше 1.
3) Для издателей PO3 и PO4 выбрать такие категории изданий, чтобы объем продаж был более 10 тыс. экз. и средняя цена книги менее 20 евро.
Примечание. В предложение HAVING следует включать только агрегаты. Другие условия целесообразно помещать в предложение WHERE. Такой запрос выполняется более эффективно.
При использовании в запросе нескольких таблиц применяют уточненные имена – имя является по структуре составным: таблица.колонка .Допускается применять одновременно уточненные и неуточненные имена. Однако уточненные имена не только устраняют неоднозначность идентификации (при наличии одинаковых имен в разных таблицах). Уточненные имена повышают производительность. Их также рекомендуют применять, чтобы исключить в будущем возникновение риска неоднозначность идентификации при выполнении модификации таблиц.
Псевдонимы можно употреблять не только для столбцов, но и для таблиц (конструкция AS опущена, т.к. применяется не во всех реализациях SQL, например в Oracle).
Пример. Псевдоним таблиц. (Запрос Alias-Tables). Конструкцию AS использовать необязательно, она вставляется автоматически (попробуйте удалить из текста, запроса, сохранить и закрыть запрос, а потом снова открыть).
SELECT
au_fname, au_lname, a.city
FROM authors a
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.