Читаем SQL: быстрое погружение полностью

Неагрегатное поле — это просто поле в условии SELECT, которое вызывается без агрегатной функции.

<p id="практическое_задание_8">Практическое задание</p>

• Сколько городов, где были выставлены счета, начинаются с буквы L?

В последнем примере мы добавили критерии в неагрегатное поле. Может возникнуть необходимость использовать критерии для агрегированных полей, например AVG(Total). Скажем, когда нам надо найти все средние значения, меньшие 20. Мы могли бы попытаться ответить на этот вопрос с помощью условия WHERE, но существует одна проблема.

Внимание

Следующий оператор SQL содержит ошибку. Но важно видеть, что критерии, созданные в условии WHERE, не работают с агрегатными данными.

SELECT

BillingCity,

AVG(Total)

FROM

Invoices

WHERE

AVG(Total) > 5

GROUP BY

BillingCity

ORDER BY

BillingCity

При выполнении запроса возникнет следующее сообщение об ошибке:

Misuse of aggregate: AVG():

(Неправильное использование агрегата: AVG())

Это сообщение об ошибке информирует нас, что для создания условия на основе агрегатной функции (по крайней мере, в данном случае) мы не можем использовать условие WHERE. В данном случае условие WHERE может указывать только, какую информацию извлекать из полей, указанных в условии SELECT. Если необходима дополнительная фильтрация на основе агрегатных функций, необходимо включить вторичную фильтрацию, известную как условие HAVING.

Условие HAVING всегда следует после условия GROUPBY. Измененный запрос теперь выглядит следующим образом:

SELECT

BillingCity,

AVG(Total)

FROM

invoices

GROUP BY

BillingCity

HAVING

AVG(Total) > 5

ORDER BY

BillingCity

Рис. 109

Примечание

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

<p id="_10_xhtml_2523toc_marker_10_11"><strong>Условия WHERE и HAVING</strong></p>

Если кратко, то разница между условиями WHERE и HAVING заключается в том, что WHERE предназначено для фильтрации неагрегатных данных, а HAVING — для фильтрации результатов, содержащих агрегаты. Если более подробно, то два типа фильтрации возникают, когда в запрос включены как условие WHERE, так и условие HAVING. Условие WHERE указывает запросу, какую информацию следует исключить из таблицы, а затем, после фильтрации данных и применения к полям агрегатных функций, условие HAVING действует как дополнительный фильтр для агрегатных данных. Давайте повторим предыдущий запрос, но на этот раз выберем только города, начинающиеся с буквы B, а затем из этого списка отфильтруем счета, среднее значение которых больше пяти (рис. 110).

SELECT

BillingCity,

AVG(Total)

FROM

invoices

WHERE

BillingCity LIKE 'B%'

GROUP BY

BillingCity

HAVING

AVG(Total) > 5

ORDER BY

BillingCity

В запросе мы выполнили ту же задачу, но на этот раз добавили условие WHERE для фильтрации результатов только по городам, начинающимся с буквы B. Данный этап фильтрации выполняется до обработки условий HAVING и ORDERBY. Так как нам необходимо выполнить фильтрацию, прежде чем мы сможем группировать, то порядок условий фильтрации важен, а условие WHERE всегда предшествует HAVING.

Рис. 110

<p id="_10_xhtml_2523toc_marker_10_12"><strong>Группировка по нескольким столбцам</strong></p>

В условиях GROUPBY можно одновременно указывать столько столбцов, сколько вам требуется. Предположим, необходимо получить более подробную разбивку средних значений счетов. Мы можем написать запрос так, чтобы агрегированные данные были сначала сгруппированы по странам, а затем по городам. В приведенном ниже примере мы добавим в условие GROUPBY еще одно поле, BillingCountry. Давайте посмотрим, как работает запрос.

SELECT

BillingCountry,

BillingCity,

AVG(Total)

FROM

invoices

GROUP BY

BillingCountry, BillingCity

ORDER BY

BillingCountry

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

НАПОМИНАНИЕ

Файлы базы данных могут содержать орфографические и/или ошибки, связанные с регистром.

Рис. 111

<p id="_10_xhtml_2523toc_marker_10_13"><strong>Несколько заключительных слов о функциях</strong></p>

Цель этой главы — познакомить вас с функциями. Мы описали возможности некоторых функций, их способность превращать данные в информацию и решать практические задачи. Если бы пришлось рассматривать все функции в SQLite и иллюстрировать работу каждой из них, то эту книгу мне никогда не удалось бы закончить. К счастью, в интернете можно найти массу информации о функциях SQL и их использовании. Я всегда рекомендую студентам поискать информацию о функциях в интернете, чтобы увидеть разные примеры их использования. Надеюсь, что вы продолжите обучение самостоятельно и узнаете еще больше о том, как использовать эти мощные инструменты.

<p id="_10_xhtml_2523toc_marker_10_14"><strong>Контрольные вопросы</strong></p>

1. Создайте однострочный список рассылки для всех клиентов из США, включая полные имена, написанные заглавными буквами, и полные адреса с пятизначными почтовыми индексами, в следующем формате:

Перейти на страницу:

Все книги серии Библиотека программиста

Программист-фанатик
Программист-фанатик

В этой книге вы не найдете описания конкретных технологий, алгоритмов и языков программирования — ценность ее не в этом. Она представляет собой сборник практических советов и рекомендаций, касающихся ситуаций, с которыми порой сталкивается любой разработчик: отсутствие мотивации, выбор приоритетов, психология программирования, отношения с руководством и коллегами и многие другие. Подобные знания обычно приходят лишь в результате многолетнего опыта реальной работы. По большому счету перед вами — ярко и увлекательно написанное руководство, которое поможет быстро сделать карьеру в индустрии разработки ПО любому, кто поставил себе такую цель. Конечно, опытные программисты могут найти некоторые идеи автора достаточно очевидными, но и для таких найдутся темы, которые позволят пересмотреть устоявшиеся взгляды и выйти на новый уровень мастерства. Для тех же, кто только в самом начале своего пути как разработчика, чтение данной книги, несомненно, откроет широчайшие перспективы. Издательство выражает благодарность Шувалову А. В. и Курышеву А. И. за помощь в работе над книгой.

Чед Фаулер

Программирование, программы, базы данных / Программирование / Книги по IT

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных