Sql group by having by: HAVING (Transact-SQL) — SQL Server
Содержание
HAVING (Transact-SQL) — SQL Server
-
- Чтение занимает 2 мин
В этой статье
Применимо к: SQL Server (все поддерживаемые версии) База данных SQL Azure Управляемый экземпляр SQL Azure Azure Synapse Analytics Параллельное хранилище данных
Определяет условие поиска для группы или статистического выражения. Предложение HAVING можно использовать только в инструкции SELECT. HAVING обычно используется с предложением GROUP BY. Если предложение GROUP BY не используется, имеется одна неявная агрегированная группа.
Синтаксические обозначения в Transact-SQL
Синтаксис
[ HAVING <search condition> ]
Аргументы
<search_condition> задает один предикат или несколько, которые должны выполняться для групп или агрегатов. Дополнительные сведения об условиях поиска и предикатах см. в статье Условие поиска (Transact-SQL).
Типы данных text, image и ntext нельзя использовать в предложении HAVING.
Примеры
В следующем примере, который использует простое предложение HAVING
, из таблицы SalesOrderID
извлекается сумма всех полей SalesOrderDetail
, значение которых превышает $100000.00
.
USE AdventureWorks2012 ;
GO
SELECT SalesOrderID, SUM(LineTotal) AS SubTotal
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
HAVING SUM(LineTotal) > 100000.00
ORDER BY SalesOrderID ;
Примеры: Azure Synapse Analytics и Параллельное хранилище данных
В приведенном ниже примере предложение HAVING
используется с целью получения общей суммы SalesAmount
, превышающей 80000
для каждого OrderDateKey
из таблицы FactInternetSales
.
-- Uses AdventureWorks
SELECT OrderDateKey, SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
HAVING SUM(SalesAmount) > 80000
ORDER BY OrderDateKey;
См. также:
GROUP BY (Transact-SQL)
WHERE (Transact-SQL)
Какова последовательность выполнения предложения Group By, Having и Where в SQL Server?
Меня просто смущает последовательность выполнения запроса SQL, когда мы используем GROUP BY и HAVING с предложением WHERE. Кого из них казнят первым? Какова последовательность?
sql
sql-server
sql-server-2005
Поделиться
Источник
Unknown
15 июля 2009 в 08:10
10 ответов
- Являются ли «having» и «where» полностью эквивалентными, когда нет предложения «group by»?
Вообще, есть ли какая-то разница между having и where предложениями, когда нет group by предложения (особенно в MySQL, PostrgrSQL, Oracle и MSSQL)? select * from user where foo > 3 seems to be equivalent to select * from user having foo > 3
- Использование предложения group by и having
Используя следующую схему: Supplier (sid, name, status, city) Part (pid, name, color, weight, city) Project (jid, name, city) Supplies (sid, pid, jid**, quantity) Получите номера поставщиков и имена поставщиков деталей, поставляемых по крайней мере для двух разных проектов. Получите номера…
184
в порядке:
FROM & JOIN s определите & строк фильтра
WHERE дополнительные фильтры по строкам
GROUP BY объединяет эти строки в группы
HAVING группы фильтров
ORDER BY упорядочивает оставшиеся строки/группы
LIMIT фильтры по оставшимся строкам / группам
Поделиться
KM.
15 июля 2009 в 12:24
14
Вот полная последовательность для sql server :
1. FROM
2. ON
3. JOIN
4. WHERE
5. GROUP BY
6. WITH CUBE or WITH ROLLUP
7. HAVING
8. SELECT
9. DISTINCT
10. ORDER BY
11. TOP
Таким образом, из приведенного выше списка вы можете легко понять последовательность выполнения GROUP BY, HAVING and WHERE
, которая :
1. WHERE
2. GROUP BY
3. HAVING
Более подробную информацию об этом можно получить в Microsoft
Поделиться
Md. Suman Kabir
06 ноября 2017 в 17:43
8
Где сначала, то вы GROUP результат запроса, и последнее, но не менее важное HAVING-предложение берется для фильтрации сгруппированного результата. Это заказ «logical», я не знаю, как это технически реализовано в движке.
Поделиться
Matthias Meid
15 июля 2009 в 08:14
- SQL — WHERE и HAVING
наша задача состоит в том, чтобы заменить предложения GROUP BY и HAVING на WHERE, если это возможно. SQL-код выглядит следующим образом: SELECT Sparte , Region , SUM( Umsatz ) FROM Fakten GROUP BY Sparte , Region HAVING SUM( Umsatz ) >= 50000 Можно ли изменить последние две строки с помощью. ..
- Левое соединение после Group By и HAVING
У меня есть представление cnst_prsn_nm . Я хочу проверить записи, которые имеют один и тот же cnst_mstr_id и одну и ту же фамилию, но отличаются по именам. Так я и сделал в Teradata SQL SELECT TOP 20 prsn_nm_a.cnst_mstr_id FROM arc_mdm_vws.bz_cnst_prsn_nm prsn_nm_a INNER JOIN…
2
Я думаю, что это реализовано в движке, как сказал Матиас: WHERE, GROUP BY, HAVING
Я пытался найти ссылку в интернете, которая перечисляет всю последовательность (то есть «SELECT» идет прямо вниз), но я не могу ее найти. Это было подробно описано в книге «Inside Microsoft SQL Server 2005», которую я читал не так давно, по твердому качественному обучению
Edit: нашел ссылку: http:/ / blogs.x2line.com/al / archive/2007/06/30/3187. aspx
Поделиться
AdaTheDev
15 июля 2009 в 08:25
2
В Oracle 12c вы можете запустить код и в той, и в другой последовательности ниже:
Where
Group By
Having
Или
Where
Having
Group by
Поделиться
Jim Chen
06 ноября 2017 в 17:15
1
Подумайте о том, что вам нужно сделать, если вы хотите реализовать:
- WHERE: его нужно выполнить JOIN операций.
- GROUP BY: вы указываете Group by для «group» результатов соединения, затем он должен быть после операции JOIN, после использования WHERE.
- HAVING : HAVING предназначен для фильтрации, как говорит GROUP BY expressions. Затем, он выполняется после того, как группа купить.
Порядок-WHERE, группировка ПО и HAVING.
Поделиться
FerranB
15 июля 2009 в 08:47
1
В следующем порядке
- FROM & JOIN
- WHERE
- ГРУППА ПО
- HAVING
- SELECT
- ЗАКАЗАТЬ ПО
- LIMIT
Поделиться
GimmicksWorld
24 мая 2017 в 02:51
0
Предложение Having может предшествовать / предшествовать предложению group by.
Пример:
выберите * FROM test_std;
ROLL_NO SNAME DOB TEACH
1 John 27-AUG-18 Wills
2 Knit 27-AUG-18 Prestion
3 Perl 27-AUG-18 Wills
4 Ohrm 27-AUG-18 Woods
5 Smith 27-AUG-18 Charmy
6 Jony 27-AUG-18 Wills
Warner 20-NOV-18 Wills
Marsh 12-NOV-18 Langer
FINCH 18-OCT-18 Langer
Выделено 9 строк.
выберите обучения, рассчитывать count( ) от test_std
имея count( ) > 1
группа по TEACH ;
TEACH
COUNT
Лангер
2
Завещания
4
Поделиться
manoj remala
07 декабря 2018 в 16:47
0
Это SQL порядок выполнения запроса,
Вы можете проверить порядок выполнения с примерами из этой статьи .
Для вас вопрос ниже строк может быть полезен и непосредственно взят из этой статьи .
- Группа по —> оставшиеся строки после применения ограничений WHERE затем группируются на основе общих значений в столбце, указанном в предложении GROUP BY. В результате группировки будет только столько строк, сколько уникальных значений в этом столбце. Неявно это означает, что вам нужно использовать его только тогда, когда у вас есть агрегатные функции в вашем запросе.
- HAVING —> если запрос содержит предложение GROUP BY, то ограничения в предложении HAVING затем применяются к сгруппированным строкам, отбрасывая сгруппированные строки, которые не удовлетворяют этому ограничению. Как и предложение WHERE, псевдонимы также недоступны с этого шага в большинстве баз данных.
Рекомендации:-
Поделиться
Kushan Gunasekera
19 июля 2020 в 05:07
-2
ВЫБИРАТЬ
ОТ
JOINs
ГДЕ
Группировка по
наличию
ЗАКАЗАТЬ ПО
Поделиться
OcTella
22 декабря 2010 в 02:54
Похожие вопросы:
SQL запрос, последовательность выполнения
Какова будет последовательность выполнения, за которой следует SQL, если запрос имеет предложение group by и order by? Зависит ли это от их позиции в запросе???
SQL последовательность выполнения группы by и having-это учебник викторины неправильно или я ошибаюсь?
Я делаю некоторые исследования для работы над SQL запросами. Я наткнулся на следующее на TutorialsPoint, и я не понимаю, почему ответ B, а не C. Мне всегда говорили, что предложение GROUP BY стоит…
hibernate — использование ‘having’ без предложения group by в hql
я пытаюсь запустить запрос hql, который увеличивает (суммирует) количество транзакций, сделанных на определенном счете, мне не нужна группа по, так как мое предложение where имеет определенный…
Являются ли «having» и «where» полностью эквивалентными, когда нет предложения «group by»?
Вообще, есть ли какая-то разница между having и where предложениями, когда нет group by предложения (особенно в MySQL, PostrgrSQL, Oracle и MSSQL)? select * from user where foo > 3 seems to be…
Использование предложения group by и having
Используя следующую схему: Supplier (sid, name, status, city) Part (pid, name, color, weight, city) Project (jid, name, city) Supplies (sid, pid, jid**, quantity) Получите номера поставщиков и имена. ..
SQL — WHERE и HAVING
наша задача состоит в том, чтобы заменить предложения GROUP BY и HAVING на WHERE, если это возможно. SQL-код выглядит следующим образом: SELECT Sparte , Region , SUM( Umsatz ) FROM Fakten GROUP BY…
Левое соединение после Group By и HAVING
У меня есть представление cnst_prsn_nm . Я хочу проверить записи, которые имеют один и тот же cnst_mstr_id и одну и ту же фамилию, но отличаются по именам. Так я и сделал в Teradata SQL SELECT TOP…
SQL GROUP BY и HAVING выпуск
Я изучаю некоторые sql и делаю некоторые упражнения, чтобы лучше учиться, и у меня возникают проблемы с функцией GROUP BY. Итак, у меня есть несколько основных таблиц актеров(название, Год,…
SQL Server запрос для всех столбцов с group by и having
Мне интересно, есть ли способ запросить все столбцы с group by и having в SQL Server? Например, у меня есть 6 столбцов, a, b,…,f, и это то, что я хочу получить: Select * From table Group by. ..
Предложения having без Group by
Пожалуйста, помогите мне разобраться в этой ситуации. Почему в документации и других ресурсах я могу найти информацию о том, что предложение HAVING не может быть использовано без GROUP BY? Потому…
Команда SELECT Раздел Раздел HAVING — Условия поиска на группу строк — HAVING COUNT и HAVING MIN
Раздел HAVING
Наконец, последним при вычислении табличного выражения используется раздел HAVING (если он присутствует).
Раздел HAVING может осмысленно появиться в табличном выражении только в том случае, когда в нем присутствует раздел GROUP BY. Условие поиска этого раздела задает условие на группу строк сгруппированной таблицы. Формально раздел HAVING может присутствовать и в табличном выражении, не содержащем GROUP BY. В этом случае полагается, что результат вычисления предыдущих разделов представляет собой сгруппированную таблицу, состоящую из одной группы без выделенных столбцов группирования.
Условие поиска раздела HAVING строится по тем же синтаксическим правилам, что и условие поиска раздела WHERE, и может включать те же самые предикаты. Однако имеются специальные синтаксические ограничения по части использования в условии поиска спецификаций столбцов таблиц из раздела FROM данного табличного выражения. Эти ограничения следуют из того, что условие поиска раздела HAVING задает условие на целую группу, а не на индивидуальные строки.
Поэтому в арифметических выражениях предикатов, входящих в условие выборки раздела HAVING, прямо можно использовать только спецификации столбцов, указанных в качестве столбцов группирования в разделе GROUP BY. Остальные столбцы можно специфицировать только внутри спецификаций агрегатных функций COUNT, SUM, AVG, MIN и MAX, вычисляющих в данном случае некоторое агрегатное значение для всей группы строк. Аналогично обстоит дело с подзапросами, входящими в предикаты условия выборки раздела HAVING: если в подзапросе используется характеристика текущей группы, то она может задаваться только путем ссылки на столбцы группирования.
Результатом выполнения раздела HAVING является сгруппированная таблица, содержащая только те группы строк, для которых результат вычисления условия поиска есть TRUE. В частности, если раздел HAVING присутствует в табличном выражении, не содержащем GROUP BY, то результатом его выполнения будет либо пустая таблица, либо результат выполнения предыдущих разделов табличного выражения, рассматриваемый как одна группа без столбцов группирования.
HAVING COUNT
Выбрать коды товаров, покупаемых более чем одним покупателем:
SELECT stock FROM ordsale GROUP BY stock HAVING COUNT(*) > 1;
HAVING MIN
Получить значения минимального и максимального оклада для клерков каждого отдела, где самое низкое жалованье составляет менее $1,000:
SELECT deptno, MIN(sal), MAX(sal) FROM emp WHERE job = ‘CLERK’ GROUP BY deptno HAVING MIN(sal)
предложения GROUP BY, HAVING и агрегатные функции
Предложение GROUP BY (инструкции SELECT) позволяет группировать данные (строки) по значению какого-либо столбца или нескольких столбцов или выражений. Результатом будет набор сводных строк.
Каждый столбец в списке выборки должен присутствовать в предложении GROUP BY, исключение составляют только константы и столбцы — операнды агрегатных функций.
Таблицу можно сгруппировать по любой комбинации ее столбцов.
Агрегатные функции используются для получения из группы строк одного единственного суммарного значения. Все агрегатные функции выполняют вычисления над одним аргументом, который может быть или столбцом, или выражением. Результатом вычислений любой агрегатной функции является константное значение, отображаемое в отдельном столбце результата.
Агрегатные функции указываются в списке столбцов инструкции SELECT, которая также может содержать предложение GROUP BY. Если в инструкции SELECT отсутствует предложение GROUP BY, а список столбцов выборки содержит, по крайней мере, одну агрегатную функцию, тогда он не должен содержать простых столбцов. С другой стороны, список выборки столбцов может содержать имена столбцов, которые не являются аргументами агрегатной функции, если эти столбцы служат аргументами предложения GROUP BY.
Если запрос содержит предложение WHERE, то агрегатные функции вычисляют значение для результатов выборки.
Агрегатные функции MIN и MAX вычисляют наименьшее и наибольшее значение столбца соответственно. Аргументами могут быть числа, строки и даты. Все значения NULL удаляются перед вычислением (т.е. в расчет не берутся).
Агрегатная функция SUM вычисляет общую сумму значений столбца. Аргументами могут быть только числа. Использование параметра DISTINCT устраняет все повторяющиеся значения в столбце перед применением функции SUM. Аналогично удаляются все значения NULL перед применением этой агрегатной функции.
Агрегатная функция AVG возвращает среднее значение для всех значений столбца. Аргументами также могут быть только числа, а все значения NULL удаляются перед вычислением.
Агрегатная функция COUNT имеет две разные формы:
- COUNT([DISTINCT] col_name) — подсчитывает количество значений в столбце col_name, значения NULL не учитываются
- COUNT(*) — подсчитывает количество строк в таблице, значения NULL также учитываются
Если в запросе используется ключевое слово DISTINCT, перед применением функции COUNT удаляются все повторяющиеся значения столбца.
Функция COUNT_BIG аналогична функции COUNT. Единственное различие между ними заключается в типе возвращаемого ими результата: функция COUNT_BIG всегда возвращает значения типа BIGINT, тогда как функция COUNT возвращает значения данных типа INTEGER.
В предложении HAVING определяется условие, которое применяется к группе строк. Оно имеет такой же смысл для групп строк, что и предложение WHERE для содержимого соответствующей таблицы (WHERE применяется до группировки, HAVING после):
Параметр condition содержит агрегатные функции или константы.
SQL Server HAVING Clause
Summary : в этом руководстве вы узнаете, как использовать предложение SQL Server HAVING
для фильтрации групп на основе заданных условий.
Введение в SQL Server
HAVING
clause
Предложение HAVING
часто используется с предложением GROUP BY
для фильтрации групп на основе указанного списка условий. Следующее иллюстрирует синтаксис предложения HAVING
:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT select_list ИЗ table_name ГРУППА ПО group_list ИМЕЮЩИЕ условия;
В этом синтаксисе предложение GROUP BY
объединяет строки в группы, а предложение HAVING
применяет к этим группам одно или несколько условий.В результат включаются только группы, в которых условия оцениваются как ИСТИНА
. Другими словами, группы, для которых условие оценивается как FALSE
или UNKNOWN
, отфильтровываются.
Поскольку SQL Server обрабатывает предложение HAVING
после предложения GROUP BY
, вы не можете ссылаться на агрегатную функцию, указанную в списке выбора, с помощью псевдонима столбца. Следующий запрос завершится ошибкой:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT column_name1, column_name2, агрегатная_функция (имя_столбца3) псевдоним_столбца ИЗ table_name ГРУППА ПО column_name1, column_name2 ИМЕЮЩИЕ алиас_столбца> значение;
Вместо этого вы должны явно использовать выражение агрегатной функции в предложении HAVING
, как показано ниже:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT column_name1, column_name2, aggregate_function (column_name3) псевдоним ИЗ table_name ГРУППА ПО column_name1, column_name2 ИМЕЮЩИЕ агрегатная_функция (имя_столбца3)> значение;
SQL Server
ИМЕЕТ
примеров
Давайте рассмотрим несколько примеров, чтобы понять, как работает предложение HAVING
.
SQL Server
HAVING
с функцией COUNT
, пример
См. Следующую таблицу заказов
из образца базы данных:
В следующем операторе используется предложение HAVING
для поиска клиентов, разместивших не менее двух заказов на год:
Язык кода: SQL (язык структурированных запросов) (sql)
ВЫБРАТЬ Пользовательский ИД, ГОД (дата_заказа), COUNT (order_id) order_count ИЗ заказы на продажу ГРУППА ПО Пользовательский ИД, ГОД (заказ_дата) ИМЕЮЩИЕ COUNT (order_id)> = 2 СОРТИРОВАТЬ ПО Пользовательский ИД;
В этом примере:
- Во-первых, предложение
GROUP BY
группирует заказ на продажу по клиенту и году заказа.ФункцияCOUNT ()
возвращает количество заказов, размещенных каждым клиентом за год. - Во-вторых, предложение
HAVING
отфильтровало всех клиентов, количество заказов которых меньше двух.
SQL Server
HAVING
clause с функцией SUM ()
, пример
Рассмотрим следующую таблицу order_items
:
Следующий оператор находит заказы на продажу, чистая стоимость которых превышает 20,000:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT номер заказа, СУММ ( количество * list_price * (1 - скидка) ) чистая стоимость ИЗ продажи.order_items ГРУППА ПО номер заказа ИМЕЮЩИЕ СУММ ( количество * list_price * (1 - скидка) )> 20000 СОРТИРОВАТЬ ПО чистая стоимость;
В этом примере:
- Во-первых, функция
СУММ ()
возвращает чистые значения заказов на продажу. - Во-вторых, предложение
HAVING
фильтрует заказы на продажу, чистая стоимость которых меньше или равна 20 000.
SQL Server
HAVING
clause with MAX
and MIN
functions example
См. Следующую таблицу продуктов :
Следующий оператор сначала находит максимальные и минимальные цены по прейскуранту в каждой категории продуктов.Затем он отфильтровывает категорию, у которой максимальная прейскурантная цена больше 4000 или минимальная прейскурантная цена меньше 500:
Язык кода: SQL (язык структурированных запросов) (sql)
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:
Язык кода: SQL (язык структурированных запросов) (sql)
ВЫБРАТЬ category_id, AVG (list_price) avg_list_price ИЗ производство. продукты ГРУППА ПО category_id ИМЕЮЩИЕ СРЕДНЕЕ (list_price) МЕЖДУ 500 И 1000;
В этом руководстве вы узнали, как использовать предложение SQL Server HAVING
для фильтрации групп на основе заданных условий.
Разница между предложением «Имея» и «Группировать по пункту»
Различие между предложением «Наличие» и «Группировать по пункту»
1. Предложение наличия:
Предложение «Наличие» в основном похоже на агрегатную функцию с предложением GROUP BY.Предложение HAVING используется вместо WHERE с агрегатными функциями. В то время как предложение GROUP BY группирует строки с одинаковыми значениями в итоговые строки. Предложение Have используется с предложением where для поиска строк с определенными условиями. Предложение Have всегда используется после предложения group By.
ВЫБРАТЬ СЧЕТЧИК (ЗАРПЛАТЫ) КАК COUNT_SALARIES, СОТРУДНИКИ ОТ СОТРУДНИКОВ ГРУППА ПО ЗАПРОСАМ ИМЕЕТ СЧЕТ (ЗАРПЛАТЫ)> 1;
2. Предложение Group By:
Предложение GROUP BY часто используется с агрегатными функциями (MAX, SUM, AVG) для группировки результатов по одному или нескольким столбцам. Проще говоря, мы можем сказать, что предложение GROUP BY является используется совместно с оператором SELECT для организации необходимых данных в группы.
Оператор GROUP BY группирует строки с одинаковыми значениями. Этот оператор используется после предложения where. Этот оператор часто используется с некоторыми агрегатными функциями, такими как SUM, AVG, COUNT atc. для группировки результатов по одному или нескольким столбцам.
ВЫБРАТЬ СЧЕТЧИК (ЗАРПЛАТЫ) КАК COUNT_SALARIES, СОТРУДНИКИ ОТ СОТРУДНИКОВ ГРУППА ПО ЗАРПЛАТАМ;
Разница между предложением Имея и Группировать по пункту:
S. | Условие наличия | Предложение GroupBy |
---|---|---|
1. | Используется для применения некоторого дополнительного условия к запросу. | Предложение groupby используется для группировки данных в соответствии с конкретным столбцом или строкой. |
2. | Наличие не может использоваться без условия groupby. | groupby можно использовать без предложения с оператором select. |
3. | Предложение has может содержать агрегатные функции. | Он не может содержать агрегатные функции. |
4. | Он ограничивает вывод запроса с помощью некоторых условий. | Он группирует вывод на основе некоторых строк или столбцов. |
MySQL HAVING
Summary : В этом руководстве вы узнаете, как использовать предложение MySQL HAVING
для определения условия фильтрации для групп строк или агрегатов.
Введение в MySQL
HAVING
clause
Предложение HAVING
используется в операторе SELECT
для определения условий фильтрации для группы строк или агрегатов.
Предложение HAVING
часто используется с предложением GROUP BY
для фильтрации групп на основе заданного условия. Если предложение GROUP BY
опущено, предложение HAVING
ведет себя как предложение WHERE
.
Ниже показан синтаксис предложения HAVING
:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT select_list ИЗ table_name ГДЕ search_condition ГРУППА ПО group_by_expression ИМЕЮЩИЕ group_condition;
В этом синтаксисе вы указываете условие в предложении HAVING
.Если строка, которая создается предложением group by, приводит к тому, что group_condition
оценивается как истина, запрос будет включать ее в набор результатов.
Обратите внимание, что предложение HAVING
применяет условие фильтрации к каждой группе строк, а предложение WHERE
применяет условие фильтрации к каждой отдельной строке.
MySQL оценивает предложение HAVING
после предложений FROM
, WHERE
, SELECT
и GROUP BY
и до предложений ORDER BY
и LIMIT
.
Обратите внимание, что стандарт SQL определяет, что HAVING
оценивается до предложения SELECT
и после предложения GROUP BY
.
MySQL
HAVING
clause examples
Давайте рассмотрим несколько примеров использования HAVING
clause, чтобы увидеть, как это работает. Для демонстрации мы будем использовать таблицу orderdetails
в образце базы данных.
В следующем примере предложение GROUP BY
используется для получения номеров заказов, количества товаров, проданных за заказ, и общих продаж для каждого из таблицы orderdetails
:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT номер заказа, СУММ (количествоЗаказано) КАК itemsCount, СУММ (цена за каждый * заказанное количество) КАК Итого ИЗ Информация для заказа ГРУППИРОВАТЬ ПО номеру заказа;
Попробовать
Теперь вы можете определить, для какого заказа общий объем продаж превышает 1000
, используя предложение HAVING
следующим образом:
Язык кода: SQL (язык структурированных запросов) (sql)
ВЫБРАТЬ номер заказа, СУММ (количествоЗаказано) КАК itemsCount, СУММ (цена за каждый * заказанное количество) КАК Итого ИЗ Информация для заказа ГРУППА ПО номер заказа ИМЕЮЩИЕ всего> 1000;
Попробовать
Вы можете создать сложное условие в предложении HAVING
, используя такие логические операторы, как OR
и AND
.
В следующем примере предложение HAVING
используется для поиска заказов, общая сумма которых превышает 1000
и содержит более 600
элементов:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT номер заказа, СУММ (количествоЗаказано) КАК itemsCount, СУММ (цена за каждый * заказанное количество) КАК Итого ИЗ Информация для заказа ГРУППА ПО номеру заказа ИМЕЮЩИЕ всего> 1000 И itemsCount> 600;
Попробовать
Предположим, вы хотите найти все заказы, которые находятся в состоянии отгрузки и имеют общую сумму более 1500, вы можете присоединиться к Таблица orderdetails
с таблицей orders
с использованием предложения INNER JOIN
и применением условия для столбца status
и total
aggregate, как показано в следующем запросе:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT а. номер заказа, статус, СУММ (цена за каждый * заказанное количество) итого ИЗ подробности заказа Заказы INNER JOIN b ON b.ordernumber = a.ordernumber ГРУППА ПО номер заказа, статус ИМЕЮЩИЕ status = "Отправлено" И всего> 1500;
Попробовать
Предложение HAVING
полезно только тогда, когда вы используете его с предложением GROUP BY
для генерации выходных данных высокого уровня. отчеты уровня.Например, вы можете использовать предложение HAVING
, чтобы ответить на такие вопросы, как определение количества заказов в этом месяце, этом квартале или этом году, общий объем продаж которых превышает 10K.
В этом руководстве вы узнали, как использовать предложение MySQL HAVING
с предложением GROUP BY
для определения условий фильтрации для групп строк или агрегатов.
Было ли это руководство полезным?
Oracle объяснил на практических примерах
Резюме : в этом руководстве вы узнаете, как использовать предложение Oracle HAVING
для фильтрации групп, возвращаемых предложением GROUP BY
.
Введение в предложение Oracle
HAVING
Предложение HAVING
является необязательным предложением оператора SELECT
. Он используется для фильтрации групп строк, возвращаемых предложением GROUP BY
. Вот почему предложение HAVING
обычно используется с предложением GROUP BY
.
Ниже показан синтаксис предложения Oracle HAVING
:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT column_list ИЗ Т ГРУППА ПО c1 ИМЕЮЩИЕ group_condition;
В этом операторе предложение HAVING
появляется сразу после предложения GROUP BY
.
Если вы используете предложение HAVING
без предложения GROUP BY
, предложение HAVING
работает так же, как предложение WHERE
.
Обратите внимание, что предложение HAVING
фильтрует группы строк, а предложение WHERE
фильтрует строки. Это основное различие между предложениями HAVING
и WHERE
.
Oracle
HAVING
clause example
Мы будем использовать order_items
в примере базы данных для демонстрации.
A) Простой Oracle
HAVING
, пример
Следующий оператор использует предложение GROUP BY
для извлечения заказов и их значений из таблицы order_items
:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT номер заказа, SUM (unit_price * количество) order_value ИЗ order_items ГРУППА ПО номер заказа СОРТИРОВАТЬ ПО order_value DESC;
Вот результат:
Чтобы найти заказы, значения которых превышают 1 миллион, вы добавляете предложение HAVING
следующим образом:
Язык кода: SQL (язык структурированных запросов) (sql)
ВЫБРАТЬ номер заказа, SUM (unit_price * количество) order_value ИЗ order_items ГРУППА ПО номер заказа ИМЕЮЩИЕ SUM (unit_price * количество)> 1000000 СОРТИРОВАТЬ ПО order_value DESC;
Результат:
В этом примере:
- Во-первых, предложение
GROUP BY
группирует заказы по их идентификаторам и вычисляет значения порядка, используя функцияСУММ ()
- Затем предложение
HAVING
фильтрует все заказы, значения которых меньше или равны1,000,000
.
B) Oracle
HAVING
с примером сложного условия
Вы можете использовать сложное условие фильтрации в предложении HAVING
для фильтрации групп.
Например, следующий оператор находит заказы, значения которых превышают 500000
, а количество продуктов в каждом заказе составляет от 10 до 12:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT номер заказа, COUNT (item_id) item_count, SUM (unit_price * количество) итого ИЗ order_items ГРУППА ПО номер заказа ИМЕЮЩИЕ СУММ (цена_ единицы * количество)> 500000 И COUNT (item_id) МЕЖДУ 10 И 12 СОРТИРОВАТЬ ПО всего DESC, item_count DESC;
Вот результат:
В этом руководстве вы узнали, как использовать предложение Oracle HAVING
для фильтрации групп строк, возвращаемых Пункт GROUP BY
.
Было ли это руководство полезным?
Предложение SQLite HAVING с практическими примерами
Резюме : в этом руководстве вы узнаете, как использовать предложение SQLite HAVING
для указания условия фильтрации для группы или агрегата.
Введение в SQLite
Предложение HAVING
SQLite Предложение HAVING
является необязательным предложением оператора SELECT
. Предложение HAVING
определяет условие поиска для группы.
Вы часто используете предложение HAVING
с предложением GROUP BY
. Предложение GROUP BY
группирует набор строк в набор итоговых строк или групп. Затем предложение HAVING
фильтрует группы на основе заданного условия.
Если вы используете предложение HAVING
, вы должны включить предложение GROUP BY
; в противном случае вы получите следующую ошибку:
Язык кода: JavaScript (javascript)
Ошибка: предложение GROUP BY требуется до HAVING
Обратите внимание, что предложение HAVING
применяется после GROUP BY
предложение, тогда как предложение WHERE
применяется перед предложением GROUP BY
.
Ниже показан синтаксис предложения HAVING
:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT столбец_1, столбец_2, агрегатная_функция (столбец_3) ИЗ Таблица ГРУППА ПО столбец_1, столбец_2 ИМЕЮЩИЕ search_condition;
В этом синтаксисе предложение HAVING
оценивает search_condition
для каждой группы как логическое выражение. Он включает группу в окончательный набор результатов, только если оценка верна.
SQLite
HAVING
clause examples
Мы будем использовать таблицу track
в образце базы данных для демонстрации.
Чтобы найти количество треков для каждого альбома, используйте предложение GROUP BY
следующим образом:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT альбумид COUNT (trackid) ИЗ треки ГРУППА ПО альбумид;
Попробовать
Чтобы найти номера треков для альбома с идентификатором 1, мы добавляем предложение HAVING
к следующему оператору:
ВЫБРАТЬ альбумид COUNT (trackid) ИЗ треки ГРУППА ПО альбумид ИМЕЮЩИЙ albumid = 1;
Попробовать
Мы сослались на столбец AlbumId
в предложении HAVING
.
Чтобы найти альбомы с количеством треков от 18 до 20, вы используете агрегатную функцию в предложении HAVING
, как показано в следующем заявлении:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT альбумид COUNT (trackid) ИЗ треки ГРУППА ПО альбумид ИМЕЮЩИЕ СЧЁТ (albumid) МЕЖДУ 18 И 20 ЗАКАЗАТЬ по albumid;
Попробовать
SQLite
HAVING
clause with INNER JOIN
example
Следующий оператор запрашивает данные из дорожек
и альбомов
таблиц с использованием внутреннее соединение для поиска альбомов, общая длина которых превышает 60 000 000 миллисекунд.
Язык кода: SQL (язык структурированных запросов) (sql)
ВЫБРАТЬ track.AlbumId, заглавие, СУММ (миллисекунды) как длина ИЗ треки ВНУТРЕННЕЕ ПРИСОЕДИНЕНИЕ к альбомам НА альбомах.AlbumId = track.AlbumId ГРУППА ПО track.AlbumId ИМЕЮЩИЕ длина> 60000000;
Попробовать
В этом руководстве вы узнали, как использовать предложение SQLite HAVING
для определения условия поиска для групп.
Было ли это руководство полезным?
HAVING (Transact-SQL) - SQL Server
- 2 минуты на чтение
В этой статье
Применимо к: SQL Server (все поддерживаемые версии) База данных SQL Azure Управляемый экземпляр SQL Azure Azure Synapse Analytics Параллельное хранилище данных
Задает условие поиска для группы или агрегата.HAVING можно использовать только с оператором SELECT. HAVING обычно используется с предложением GROUP BY. Когда GROUP BY не используется, существует неявная единственная агрегированная группа.
Соглашения о синтаксисе Transact-SQL
Синтаксис
[ИМЕЕТ <условие поиска>]
Аргументы
<условие_поиска>
Задает один или несколько предикатов, которым должны соответствовать группы и / или агрегаты. Дополнительные сведения об условиях поиска и предикатах см. В разделе Условия поиска (Transact-SQL).
Типы данных text , image и ntext нельзя использовать в предложении HAVING.
Примеры
В следующем примере, в котором используется простое предложение HAVING
, извлекается сумма для каждого SalesOrderID
из таблицы SalesOrderDetail
, которая превышает $ 100000.00
.
ЕГЭ AdventureWorks2012;
ИДТИ
ВЫБЕРИТЕ SalesOrderID, SUM (LineTotal) AS SubTotal
ОТ Sales.SalesOrderDetail
ГРУППА ПО SalesOrderID
ИМЕЮЩАЯ СУММ (LineTotal)> 100000.00
ЗАКАЗ ПО SalesOrderID;
Примеры: Azure Synapse Analytics и хранилище параллельных данных
В следующем примере предложение HAVING
используется для извлечения общего SalesAmount
, превышающего 80000
для каждого OrderDateKey
из таблицы FactInternetSales
.
- Использует AdventureWorks
ВЫБЕРИТЕ OrderDateKey, СУММ (SalesAmount) как TotalSales
ОТ ФАКТАИнтернетПродажи
ГРУППА ПО OrderDateKey
ИМЕЕТ СУММУ (SalesAmount)> 80000
ЗАКАЗАТЬ ПО OrderDateKey;
См. Также
ГРУППА ПО (Transact-SQL)
ГДЕ (Transact-SQL)
SQL COUNT () с HAVING - w3resource
СЧЕТ () с ИМЕНЕМ
Предложение HAVING с функцией SQL COUNT () может использоваться для установки условия с помощью оператора select.Предложение HAVING используется вместо предложения WHERE с функцией SQL COUNT ().
Предложение GROUP BY с предложением HAVING извлекает результат для определенной группы столбца, который соответствует условию, указанному в предложении HAVING.
Пример :
Получить данные о количестве агентов из таблицы «агенты» с условием -
1. количество агентов должно быть больше 3,
можно использовать следующий оператор SQL:
ВЫБРАТЬ СЧЕТЧИК (*)
ОТ агентов
ИМЕЕТ СЧЕТЧИК (*)> 3;
Пример таблицы: агенты
Выход:
СЧЕТЧИК (*) ---------- 12
Изображение:
SQL COUNT () с использованием и группировкой по
Пример таблицы: агенты
Получить данные о «комиссии» и количестве агентов для этой комиссии из таблицы «агенты» при следующих условиях -
1.количество агентов для конкретного «комиссара»,
2. количество агентов для данной «комиссии» должно быть более 3,
можно использовать следующий оператор SQL:
ВЫБРАТЬ комиссию, СЧЁТ (*)
ОТ агентов
ГРУППА ПО комиссии
ИМЕЕТ СЧЕТЧИК (*)> 3;
Выход:
КОМИССИЯ (*) ---------- ---------- .15 4
Примечание: выходные данные указанного оператора SQL, показанного здесь, получены с помощью Oracle Database 10g Express Edition.
Вот слайд-презентация всех агрегатных функций.
Практические упражнения по SQL
Хотите улучшить статью выше? Публикуйте свои заметки / комментарии / примеры через Disqus.
Назад: СЧЁТ с группировкой по
Далее: Функция СУММ
.