Having ms sql: SQL оператор HAVING — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite
SQL оператор HAVING — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite
В этом учебном материале вы узнаете, как использовать SQL оператор HAVING с синтаксисом и примерами.
Описание
SQL оператор HAVING используется в сочетании с оператором GROUP BY, чтобы ограничить группы возвращаемых строк только теми, чьё условие TRUE.
Синтаксис
Синтаксис оператора HAVING в SQL:
SELECT expression1, expression2, … expression_n,
aggregate_function (aggregate_expression)
FROM tables
[WHERE conditions]
GROUP BY expression1, expression2, … expression_n
HAVING condition;
Параметры или аргументы
- expression1, expression2, … expression_n
- Выражения, которые не заключены в агрегатную функцию должны быть включены в предложение GROUP BY в конце SQL оператора.
- aggregate_function
- Это агрегатная функция, такая как SUM, COUNT, MIN, MAX или AVG.
- aggregate_expression
- Это столбец или выражение, для которого будет использоваться aggregate_function.
- tables
- Таблицы, из которых вы хотите получить записи. В предложении FROM должна быть указана хотя бы одна таблица.
- WHERE conditions
- Необязательный. Это условия для выбора записей.
- HAVING condition
- Это еще одно условие, применяемое только к агрегированным результатам, чтобы ограничить группы возвращаемых строк. Только те группы, состояние которых оценивается как true, будут включены в набор результатов.
Пример — использование функции SUM
Давайте рассмотрим SQL пример HAVING, в котором используется SQL функция SUM.
Вы также можете использовать SQL функцию SUM для возврата названия department и total sales (общих продаж в связанном отделе). SQL-предложение HAVING отфильтрует результаты так, что будут возвращены только department с продажами более 1000 $.
SELECT department, SUM(sales) AS «Total sales»
FROM order_details
GROUP BY department
HAVING SUM(sales) > 1000;
SELECT department, SUM(sales) AS «Total sales» FROM order_details GROUP BY department HAVING SUM(sales) > 1000; |
Пример — использование функции COUNT
Давайте посмотрим, как мы можем использовать HAVING с SQL функцией COUNT.
Вы можете использовать SQL функцию COUNT, чтобы вернуть название department (отдела) и количество employees (сотрудников в соответствующем отделе), sales (продажи) которых составляют более 25000 $ в год. SQL-предложение HAVING будет фильтровать результаты, так что будут возвращены только отделы с более чем 10 сотрудниками.
SELECT department,
COUNT(*) AS «Number of employees»
FROM employees
WHERE salary > 25000
GROUP BY department
HAVING COUNT(*) > 10;
SELECT department, COUNT(*) AS «Number of employees» FROM employees WHERE salary > 25000 GROUP BY department HAVING COUNT(*) > 10; |
Пример — использование функции MIN
Давайте теперь посмотрим, как мы могли бы использовать HAVING с SQL функцией MIN.
Вы также можете использовать SQL функцию MIN для возврата department (названия отдела) и MIN(salary) (минимальной зарплаты в отделе). SQL-предложение HAVING вернет только те department, где MIN(salary) превышает 55000 $.
SELECT department, MIN(salary) AS «Lowest salary»
FROM employees
GROUP BY department
HAVING MIN(salary) > 55000;
SELECT department, MIN(salary) AS «Lowest salary» FROM employees GROUP BY department HAVING MIN(salary) > 55000; |
Пример — использование функции MAX
Наконец, рассмотрим, использование HAVING с функцией SQL MAX.
Например, вы можете использовать SQL функцию MAX, чтобы вернуть department и максимальную salary в отделе. SQL-предложение HAVING вернет только те department, чья максимальная salary составляет менее 35000 $.
SELECT department,
MAX(salary) AS «Highest salary»
FROM employees
GROUP BY department
HAVING MAX(salary) < 50000;
SELECT department, MAX(salary) AS «Highest salary» FROM employees GROUP BY department HAVING MAX(salary) < 50000; |
SQL HAVING — интересующие значения агрегатных функций
SELECT ИМЕНА_СТОЛБЦОВ
FROM ИМЯ_ТАБЛИЦЫ GROUP BY ИМЯ_СТОЛБЦА
HAVING АГРЕГАТНАЯ_ФУНКЦИЯ(ИМЯ СТОЛБЦА)
ОПЕРАТОР_СРАВНЕНИЯ ЗАДАННОЕ ЧИСЛО
Следует особо заметить, что оператор HAVING всегда находится в запросе после оператора GROUP BY.
Если вы хотите выполнить запросы к базе данных из этого урока на MS SQL Server, но эта СУБД
не установлена на вашем компьютере, то ее можно установить, пользуясь инструкцией по этой ссылке.
В первых примерах работаем с базой данных «Портал объявлений — 1». Скрипт для создания этой базы данных, её таблицы и заполения таблицы данных —
в файле по этой ссылке.
В этой базе данных есть
таблица Ads, содержащая данные об объявлениях, поданных за неделю. Столбец Category содержит
данные о больших категориях объявлений (например, Недвижимость), а столбец Parts — о более мелких
частях, входящих в категории (например, части Квартиры и Дачи являются частями категории Недвижимость).
Столбец Units содержит данные о количестве поданных объявлений, а столбец Money — о денежных суммах,
вырученных за подачу объявлений.
Пример 1. Используя операторы SQL HAVING и GROUP BY, определить категории, в которых за подачу
объявлений выручено более 20000. Пишем следующий запрос:
SELECT Category, SUM(Money) AS Money
FROM Ads GROUP BY Category
HAVING SUM(Money)>20000
Результатом выполнения запроса будет следующая таблица:
Category | Money |
Недвижимость | 40530 |
Транспорт | 38560 |
Пример 2. База данных и таблица —
те же, что и в примере 1.
Используя операторы SQL HAVING и GROUP BY, требуется вывести категории, в какой-либо части которых минимальное количество
поданных объявлений не превышает 100.
Для этого пишем следующий запрос:
SELECT Category, Units, MIN(Units) AS Minimum
FROM Ads GROUP BY Category
HAVING MIN(Units)
Результатом будет следующая таблица:
Category | Part | Minimum |
Досуг | Игры | 41 |
Недвижимость | Дома | 47 |
Стройматериалы | Доски | 68 |
Пример 3. База данных и таблица —
те же, что и в предыдущих примерах.
Используя операторы SQL HAVING и GROUP BY, требуется вывести категории объявлений,
в которых более двух частей. Пишем следующий запрос:
SELECT Category, Part
FROM Ads GROUP BY Category
HAVING COUNT(*)>2
Результатом будет следующая таблица:
Category | Part |
Досуг | Книги |
Досуг | Музыка |
Досуг | Игры |
Недвижимость | Квартиры |
Недвижимость | Дачи |
Недвижимость | Дома |
Примеры запросов к базе данных «Портал объявлений-1» есть также в уроках об
операторах INSERT, UPDATE, DELETE и UNION.
Написать запросы с оператором SQL HAVING самостоятельно, а затем посмотреть решения
Самостоятельно поработайте с таблицей Staff (штатные сотрудники) базы данных фирмы.
В ней есть столбцы Name (фамилия), Dept (номер отдела), Years (длительность трудового стажа)
и Salary (размер заработной платы). Примеры для самостоятельного решения со ссылками для проверки
решения — после таблицы.
Name | Dept | Years | Salary |
Sanders | 20 | 7 | 18357.5 |
Junkers | 15 | 6 | 16232.8 |
Moonlight | 15 | 8 | 21500.6 |
Pernal | 20 | 8 | 18171.2 |
Aisen | 15 | 7 | 19540.7 |
McGregor | 15 | 7 | 15790.8 |
Marenghi | 38 | 5 | 17506.8 |
Doctor | 20 | 5 | 12322.4 |
Factor | 38 | 8 | 16228.7 |
Оператор SQL HAVING можно использовать для выборки данных, соответствующим результатам сравнения
не только с заданным числом, но и со значением, возвращаемым квантором ALL или ANY (SOME).
Квантор ALL возвращает из запроса, к которому он применяется, максимальное значение и тогда при помощи
оператора HAVING происходит сравнение с максимальным значением. Например, ALL(10, 15, 20) вернёт 20.
Квантор ANY (и его аналог SOME) возвращает минимальное значение и тогда при помощи
оператора HAVING происходит сравнение с минимальным значением. Синтаксис запроса с оператором SQL HAVING,
определяющий сравнение со значением, возвращаемым квантором ALL или ANY (SOME) выглядит следующим образом:.
SELECT ИМЕНА_СТОЛБЦОВ
FROM ИМЯ_ТАБЛИЦЫ GROUP BY ИМЯ_СТОЛБЦА
HAVING АГРЕГАТНАЯ_ФУНКЦИЯ(ИМЯ СТОЛБЦА)
ОПЕРАТОР_СРАВНЕНИЯ КВАНТОР
(SELECT АГРЕГАТНАЯ_ФУНКЦИЯ(ИМЯ СТОЛБЦА)
FROM ИМЯ_ТАБЛИЦЫ GROUP BY ИМЯ_СТОЛБЦА)
Пример 7. Есть база данных «Театр». В ней есть таблица Play,
содержащая данные о постановках в театре. В этой таблице есть поля PlayID (идентификатор), Name (название),
Genre (жанр), Author (автор), Dir_ID (внешний ключ — идентификатор режиссёра), PremiereDate
(дата премьеры), LastDate (дата окончания). Требуется определить самый популярный жанр театра, то есть
жанр, в котором поставлено наибольшее количество постановок.
Используя операторы SQL HAVING и GROUP BY, пишем первую часть запроса к таблице Play, которая
задаёт сравнение числа строк, сгруппированных по жанру:
SELECT Genre FROM Play GROUP BY Genre HAVING COUNT(*) >=
Теперь нужно определить, с чем сравнивать. Это максимальное число записей в той же
таблице, сгруппированных по жанру. Поэтом нам понадобиться квантор ALL. Пишем вторую часть запроса:
ALL(SELECT COUNT(*) FROM PLAY GROUP BY Genre)
Весь запрос для определения самого популярного жанра в театре будет следующим:
SELECT Genre FROM Play GROUP BY Genre HAVING COUNT(*) >=
ALL(SELECT COUNT(*) FROM PLAY GROUP BY Genre)
Вернёмся к запросам с оператором SQL HAVING, в которых сравнение проводится с заданным числом, как в первом
параграфе. Но усложним задачу. На практике часто число строк в результате запроса определяется внешним
ключом, ссылающимся на другую таблицу..
Пример 8. Продолжаем работать с базой данных «Театр». Нам понадобятся
таблицы Play, содержащая данные о постановках в театре и Team, содержащая данные о ролях актёров. Требуется
вывести список моноспектаклей (спектаклей с одним актёром). Ниже
приведена схема базы данных «Театр» (для увеличения рисунка нажать на него левой кнопкой мыши).
Если ещё точнее, нам нужно выбрать спектакли, в которых лишь одна роль. Среди полей
в таблице Team есть PlayID — внешний ключ, ссылающийся на таблицу Play.
В каждой записи таблицы Team этот внешний ключ определяет постановку, в которой исполняется данная роль.
Если мы соединим таблицы Play и Team по ключу PlayID, то мы сможем определить количество ролей в постановках.
Так как мы соединяем две таблицы, а не больше, то для простоты можем использовать соединение без оператора
JOIN, перечисляя таблицы через запятую, а для обозначения условия соединения используя слово WHERE.
C оператором HAVING используем агрегатную функцию COUNT — для подсчёта числа ролей
в каждой постановке. Весь запрос для определения спектаклей с одной ролью, а следовательно, с одним
актёром будет следующим:
SELECT Play.Name AS pname FROM Play, Team WHERE Team.PLAY_ID =
Play.Play_ID GROUP BY Play.Name
HAVING COUNT(Team.PLAY_ID) = 1 ORDER BY Play.Name
Написать запросы с оператором SQL HAVING самостоятельно, а затем посмотреть решения
Пример 9. Продолжаем работать с базой данных «Театр». Вывести список актеров, которые
в одном спектакле играют более одной роли, и количество их ролей.
Использовать оператор JOIN. Естественно, использовать HAVING, GROUP BY.
Правильное решение и ответ.
Поделиться с друзьями
Реляционные базы данных и язык SQL
HAVING в SQL
Вы здесь:
Главная — MySQL — SQL — HAVING в SQL
В предыдущей статье мы разобрали GROUP BY в SQL. Там я написал, что данная конструкция позволяет выбирать отдельные группы и для каждой группы вычислять функции, указанные после SELECT. А HAVING позволяет, согласно результату выполнения функций, отфильтровать лишние строки из групп. Разберём это подробнее.
Вспомним нашу предыдущую задачу, где мы вычисляли среднюю цену на молоко для конкретной сети супермаркетов. Давайте с Вами не просто посмотрим среднюю цену, но и при этом выведем только те сети супермаркетов, где средняя цена ниже 38.
Для этой фильтрации по результатам выполнения агрегатной функции используется в SQL команда HAVING:
SELECT `shop_id`, AVG(`price`) FROM `table` GROUP BY `shop_id` HAVING AVG(`price`) < 38
В результате, вместо 4-х строк у нас будет лишь 3:
shop_id |
AVG(`price`) |
1 | 37.5 |
2 | 36.0 |
3 | 37.0 |
Если конструкции GROUP BY не будет, то HAVING будет применяться не к конкретной группе, а ко всей выборке. Это означает, что если условие HAVING будет выполняться, то оно никакого влияния не окажет. А если выполняться не будет, то не будет ни одной результирующей строки.
Используется HAVING в SQL не так часто, как остальные команды, но знать и уметь его использовать крайне желательно.
-
Создано 11.09.2013 13:39:50 -
Михаил Русаков
Предыдущая статья Следующая статья
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
-
Кнопка:
<a href=»https://myrusakov.ru» target=»_blank»><img src=»https://myrusakov.ru/images/button.gif» alt=»Как создать свой сайт» /></a>Она выглядит вот так:
-
Текстовая ссылка:
<a href=»https://myrusakov.ru» target=»_blank»>Как создать свой сайт</a>Она выглядит вот так: Как создать свой сайт
- BB-код ссылки для форумов (например, можете поставить её в подписи):
[URL=»https://myrusakov.ru»]Как создать свой сайт[/URL]
HAVING SQL: описание, синтаксис, примеры
SQL представляет собой стандарт языка для работы с реляционными базами данных. Он имеет в своем арсенале множество мощных инструментов манипулирования данными, хранящихся в виде таблиц.
Несомненно, возможность группировать данные при их выборке по определенному признаку является одним из таких инструментов. Оператор SQL HAVING наряду с оператором WHERE позволяет определять условия выборки уже сгруппированных некоторым образом данных.
Параметр HAVING SQL: описание
Прежде всего стоит отметить, что данный параметр является необязательным и применяется исключительно в связке с параметром GROUP BY. Как вы помните, GROUP BY применяется тогда, когда в SELECT используются агрегатные функции, и результаты их вычислений нужно получить по определенным группам. Если WHERE позволяет задать условия выборки перед тем, как данные будут сгруппированы, то HAVING содержит условия, касающиеся данных уже непосредственно в самих группах. Для лучшего понимания давайте разберем пример со схемой, представленный на рисунке ниже.
Это отличный пример, дающий HAVING SQL описание. Дана таблица с перечнем наименований продукции, компаниями, выпускающими их, и некоторыми другими полями. В запросе в верхнем правом углу мы пытаемся получить информацию о том, какое количество наименований продукции выпускает каждая компания, при этом в результат мы хотим вывести только те компании, которые выпускают более 2 наименований. Параметр GROUP BY сформировал три группы, соответствующие названиям компаний, для каждой из которых посчитано количество продукции (строк). Но параметр HAVING своим условием отсек одну группу из результирующей выборки, поскольку она не удовлетворяла условию. В результате мы получаем две группы, соответствующие компаниям с количеством продукции 5 и 3.
Может возникнуть вопрос о том, зачем использовать HAVING, если в SQL имеется WHERE. Если бы мы использовали WHERE, то он бы смотрел на общее количество строк в таблице, а не по группам, и условие не имело бы смысла в данном случае. Однако довольно часто они прекрасно уживаются в одном запросе.
На примере выше мы можем видеть, как сначала происходит отбор данных по именам работников, указанным в параметре WHERE, а затем сгруппированный в GROUP BY результат проходит дополнительную проверку по сумме зарплаты для каждого работника.
Параметр SQL HAVING: примеры, синтаксис
Рассмотрим некоторые особенности синтаксиса HAVING SQL. Описание данного параметра довольно простое. Во-первых, как уже отмечалось, он используется исключительно в связке с параметром GROUP BY и указывается сразу же после него и перед ORDER BY, если таковой имеется в запросе. Оно и понятно, так как HAVING определяет условия для уже сгруппированных данных. Во-вторых, в условии этого параметра можно использовать только агрегатные функции и поля, указанные в параметре GROUP BY. Все условия в данном параметре указываются точно таким же образом, как и в случае с WHERE.
Заключение
Как видите, ничего сложного в данном операторе нет. Семантически он используется так же, как и WHERE. Важно понять то, что WHERE используют относительно всех выбираемых данных, а HAVING — только по отношению к группам, определенным в параметре GROUP BY. Мы представили исчерпывающее для HAVING SQL описание, которого достаточно для уверенной работы с ним.
SQL Server HAVING Clause
Summary : в этом руководстве вы узнаете, как использовать предложение SQL Server HAVING
для фильтрации групп на основе заданных условий.
Введение в SQL Server HAVING
clause
Предложение HAVING
часто используется с предложением GROUP BY
для фильтрации групп на основе указанного списка условий. Следующее иллюстрирует синтаксис предложения HAVING
:
SELECT select_list ОТ table_name ГРУППА ПО group_list ИМЕЕТ условия;
В этом синтаксисе предложение GROUP BY
объединяет строки в группы, а предложение HAVING
применяет одно или несколько условий к этим группам.В результат включаются только группы, в которых условия оцениваются как ИСТИНА
. Другими словами, группы, для которых условие оценивается как FALSE
или UNKNOWN
, отфильтровываются.
Поскольку SQL Server обрабатывает предложение HAVING
после предложения GROUP BY
, вы не можете ссылаться на агрегатную функцию, указанную в списке выбора, с помощью псевдонима столбца. Следующий запрос завершится ошибкой:
SELECT column_name1, column_name2, агрегатная_функция (имя_столбца3) псевдоним_столбца ОТ table_name ГРУППА ПО column_name1, column_name2 ИМЕЕТ алиас_столбца> значение;
Вместо этого вы должны явно использовать выражение агрегатной функции в предложении HAVING
следующим образом:
SELECT column_name1, column_name2, aggregate_function (column_name3) псевдоним ОТ table_name ГРУППА ПО column_name1, column_name2 ИМЕЕТ агрегатная_функция (имя_столбца3)> значение;
SQL Server HAVING
примеров
Давайте рассмотрим несколько примеров, чтобы понять, как работает предложение HAVING
.
SQL Server HAVING
с функцией COUNT
, пример
См. Следующую таблицу заказов
из образца базы данных:
В следующем операторе используется предложение HAVING
для поиска клиентов, разместивших не менее двух заказов год:
ВЫБРАТЬ Пользовательский ИД, ГОД (заказ_дата), COUNT (order_id) order_count ОТ заказы на продажу ГРУППА ПО Пользовательский ИД, ГОД (заказ_дата) ИМЕЕТ COUNT (order_id)> = 2 СОРТИРОВАТЬ ПО Пользовательский ИД;
В этом примере:
- Во-первых, предложение
GROUP BY
группирует заказ на продажу по клиенту и году заказа.ФункцияCOUNT ()
возвращает количество заказов, размещенных каждым клиентом за год. - Во-вторых, предложение
HAVING
отфильтровало всех клиентов, количество заказов которых меньше двух.
SQL Server HAVING
с предложением SUM ()
, пример функции
Рассмотрим следующую таблицу order_items
:
Следующий оператор находит заказы на продажу, чистая стоимость которых превышает 20 000:
SELECT номер заказа, СУММ ( количество * list_price * (1 - скидка) ) чистая стоимость ОТ продажи.order_items ГРУППА ПО номер заказа ИМЕЕТ СУММ ( количество * list_price * (1 - скидка) )> 20000 СОРТИРОВАТЬ ПО чистая стоимость;
В этом примере:
- Сначала функция
SUM ()
возвращает чистую стоимость заказов на продажу. - Во-вторых, предложение
HAVING
фильтрует заказы на продажу, чистая стоимость которых меньше или равна 20 000.
SQL Server HAVING
clause с MAX
и MIN
пример функций
См. Следующую таблицу продуктов :
Следующий оператор сначала находит максимальные и минимальные цены по прейскуранту в каждой категории продуктов.Затем он отфильтровывает категорию, у которой максимальная прейскурантная цена больше 4000 или минимальная прейскурантная цена меньше 500:
SELECT category_id, MAX (list_price) max_list_price, MIN (list_price) min_list_price ОТ production.products ГРУППА ПО category_id ИМЕЕТ MAX (list_price)> 4000 ИЛИ MIN (list_price) <500;
SQL Server HAVING
clause with AVG ()
function example
Следующая инструкция находит категории продуктов, средние цены по прейскуранту которых составляют от 500 до 1000:
SELECT category_id, AVG (list_price) avg_list_price ОТ производство.продукты ГРУППА ПО category_id ИМЕЕТ AVG (list_price) МЕЖДУ 500 И 1000;
В этом руководстве вы узнали, как использовать предложение SQL Server HAVING
для фильтрации групп на основе заданных условий.
.Предложение
SQL HAVING с примерами
Резюме : в этом руководстве вы узнаете, как использовать предложение SQL HAVING для определения условия поиска для группы строк или агрегата.
Введение в предложение HAVING в SQL
Предложение HAVING
часто используется с предложением GROUP BY в операторе SELECT для фильтрации группы строк на основе указанного условия. Следующее иллюстрирует синтаксис предложения HAVING
:
SELECT column1, column2, aggregate_function (expr) FROM table GROUP BY column1 HAVING condition; |
Предложение HAVING работает как предложение WHERE, если оно не используется с предложением GROUP BY
.Разница между предложением HAVING
и предложением WHERE
состоит в том, что предложение WHERE
используется для фильтрации строк, а предложение HAVING
используется для фильтрации групп строк.
Давайте рассмотрим несколько примеров использования предложения HAVING.
SQL HAVING examples
Давайте посмотрим на таблицу orderdetails
:
SQL HAVING with SUM function example
В этом примере мы найдем заказы на продажу, общая сумма продаж которых превышает 12000 долларов.Мы используем предложение HAVING
с предложением GROUP BY
, чтобы выполнить это как следующий запрос:
SELECT orderid, SUM (unitPrice * количество) Всего FROM orderdetails GROUP ПО заказу ИМЕЕТ всего> 12000; |
Как работает запрос.
- Сначала для каждой позиции строки заказа SQL вычисляет общую сумму с помощью функции СУММ.(Псевдоним столбца
Total
используется для форматирования вывода). - Во-вторых, предложение
GROUP BY
группирует выбранные строки поOrderID
. Для каждого заказа, у нас есть только одна группа, содержащаяOrderID
иTotal
- В-третьих, предложение
HAVING
получает группы, у которыхTotal
больше, чем12000
.
SQL HAVING with COUNT function example
Следующий запрос выбирает все заказы, которые имеют не менее 5 позиций.Мы используем функцию COUNT с предложениями HAVING
и GROUP BY
.
SELECT orderID, COUNT (productID) products FROM orderdetails GROUP BY orderID HAVING products> 5; |
Предложение SQL HAVING с примерами функций MAX и MIN
Взгляните на приведенную ниже таблицу продуктов
:
Чтобы выбрать самый дорогой продукт в каждой категории, используйте следующий запрос:
SELECT categoryID, productID, productName, MAX (unitprice) FROM products A WHERE unitprice = ( SELECT MAX (unitprice) FROM FROM products ГДЕ B.categoryId = A.categoryID) GROUP BY categoryID; |
Обратите внимание, что подзапрос используется в предложении WHERE
оператора для получения правильного продукта во внешнем запросе. Для каждой категории, чтобы выбрать самый дорогой продукт, цена которого превышает 100 долларов, мы можем использовать функцию MAX
в предложении HAVING
следующим образом:
SELECT categoryID, productID, productName , MAX (цена за единицу) ИЗ продуктов A ГДЕ Цена за штуку = ( SELECT MAX (цена за штуку) ИЗ продуктов B ГДЕ B.categoryId = A.categoryID) ГРУППА ПО идентификатору категории ИМЕЕТ МАКС. (цена за единицу)> 100; |
Обратите внимание, что выбрана только цена за единицу продукта в целом, превышающую 50 долларов.
Чтобы выбрать наименее дорогой продукт в каждой категории, мы используем тот же метод, что и самый дорогой продукт в каждой категории, за исключением того, что функция MIN
используется вместо функции MAX
:
SELECT categoryID, productID, productName, MIN (unitprice) FROM products A WHERE unitprice = ( SELECT MIN (unitprice) FROM Б.categoryId = A.categoryID) GROUP BY categoryID |
Мы можем найти наименее дорогой продукт в каждой категории, цена за единицу которой ниже 5 долларов США, используя функцию MIN
в предложении HAVING
следующим образом:
SELECT categoryID, productID, productName, MIN (unitprice) FROM product A WHERE unitprice = ( SELECT FR MIN (цена за единицу) ГДЕ B.categoryId = A.categoryID) GROUP BY categoryID HAVING MIN (unitprice) <5; |
В этом руководстве мы показали вам, как использовать предложение SQL HAVING для фильтрации групп строк.
- Было ли это руководство полезным?
- Да Нет
.