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

В следующем порядке

  1. FROM & JOIN
  2. WHERE
  3. ГРУППА ПО
  4. HAVING
  5. SELECT
  6. ЗАКАЗАТЬ ПО
  7. 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 порядок выполнения запроса,

Вы можете проверить порядок выполнения с примерами из этой статьи .

Для вас вопрос ниже строк может быть полезен и непосредственно взят из этой статьи .

  1. Группа по —> оставшиеся строки после применения ограничений WHERE затем группируются на основе общих значений в столбце, указанном в предложении GROUP BY. В результате группировки будет только столько строк, сколько уникальных значений в этом столбце. Неявно это означает, что вам нужно использовать его только тогда, когда у вас есть агрегатные функции в вашем запросе.
  1. 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 :

 

SELECT select_list ИЗ table_name ГРУППА ПО group_list ИМЕЮЩИЕ условия;

Язык кода: SQL (язык структурированных запросов) (sql)

В этом синтаксисе предложение GROUP BY объединяет строки в группы, а предложение HAVING применяет к этим группам одно или несколько условий.В результат включаются только группы, в которых условия оцениваются как ИСТИНА . Другими словами, группы, для которых условие оценивается как FALSE или UNKNOWN , отфильтровываются.

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

 

SELECT column_name1, column_name2, агрегатная_функция (имя_столбца3) псевдоним_столбца ИЗ table_name ГРУППА ПО column_name1, column_name2 ИМЕЮЩИЕ алиас_столбца> значение;

Язык кода: SQL (язык структурированных запросов) (sql)

Вместо этого вы должны явно использовать выражение агрегатной функции в предложении HAVING , как показано ниже:

 

SELECT column_name1, column_name2, aggregate_function (column_name3) псевдоним ИЗ table_name ГРУППА ПО column_name1, column_name2 ИМЕЮЩИЕ агрегатная_функция (имя_столбца3)> значение;

Язык кода: SQL (язык структурированных запросов) (sql)

SQL Server

ИМЕЕТ примеров

Давайте рассмотрим несколько примеров, чтобы понять, как работает предложение HAVING .

SQL Server

HAVING с функцией COUNT , пример

См. Следующую таблицу заказов из образца базы данных:

В следующем операторе используется предложение HAVING для поиска клиентов, разместивших не менее двух заказов на год:

 

ВЫБРАТЬ Пользовательский ИД, ГОД (дата_заказа), COUNT (order_id) order_count ИЗ заказы на продажу ГРУППА ПО Пользовательский ИД, ГОД (заказ_дата) ИМЕЮЩИЕ COUNT (order_id)> = 2 СОРТИРОВАТЬ ПО Пользовательский ИД;

Язык кода: SQL (язык структурированных запросов) (sql)

В этом примере:

  • Во-первых, предложение GROUP BY группирует заказ на продажу по клиенту и году заказа.Функция COUNT () возвращает количество заказов, размещенных каждым клиентом за год.
  • Во-вторых, предложение HAVING отфильтровало всех клиентов, количество заказов которых меньше двух.

SQL Server

HAVING clause с функцией SUM () , пример

Рассмотрим следующую таблицу order_items :

Следующий оператор находит заказы на продажу, чистая стоимость которых превышает 20,000:

 

SELECT номер заказа, СУММ ( количество * list_price * (1 - скидка) ) чистая стоимость ИЗ продажи.order_items ГРУППА ПО номер заказа ИМЕЮЩИЕ СУММ ( количество * list_price * (1 - скидка) )> 20000 СОРТИРОВАТЬ ПО чистая стоимость;

Язык кода: SQL (язык структурированных запросов) (sql)

В этом примере:

  • Во-первых, функция СУММ () возвращает чистые значения заказов на продажу.
  • Во-вторых, предложение HAVING фильтрует заказы на продажу, чистая стоимость которых меньше или равна 20 000.

SQL Server

HAVING clause with MAX and MIN functions example

См. Следующую таблицу продуктов :

Следующий оператор сначала находит максимальные и минимальные цены по прейскуранту в каждой категории продуктов.Затем он отфильтровывает категорию, у которой максимальная прейскурантная цена больше 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 (язык структурированных запросов) (sql)

SQL Server

HAVING clause with AVG () function example

Следующая инструкция находит категории продуктов, средние цены по прейскуранту которых составляют от 500 до 1000:

 

ВЫБРАТЬ category_id, AVG (list_price) avg_list_price ИЗ производство. продукты ГРУППА ПО category_id ИМЕЮЩИЕ СРЕДНЕЕ (list_price) МЕЖДУ 500 И 1000;

Язык кода: SQL (язык структурированных запросов) (sql)

В этом руководстве вы узнали, как использовать предложение 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 :

 

SELECT select_list ИЗ table_name ГДЕ search_condition ГРУППА ПО group_by_expression ИМЕЮЩИЕ group_condition;

Язык кода: SQL (язык структурированных запросов) (sql)

В этом синтаксисе вы указываете условие в предложении 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 :

 

SELECT номер заказа, СУММ (количествоЗаказано) КАК itemsCount, СУММ (цена за каждый * заказанное количество) КАК Итого ИЗ Информация для заказа ГРУППИРОВАТЬ ПО номеру заказа;

Язык кода: SQL (язык структурированных запросов) (sql)

Попробовать

Теперь вы можете определить, для какого заказа общий объем продаж превышает 1000 , используя предложение HAVING следующим образом:

 

ВЫБРАТЬ номер заказа, СУММ (количествоЗаказано) КАК itemsCount, СУММ (цена за каждый * заказанное количество) КАК Итого ИЗ Информация для заказа ГРУППА ПО номер заказа ИМЕЮЩИЕ всего> 1000;

Язык кода: SQL (язык структурированных запросов) (sql)

Попробовать

Вы можете создать сложное условие в предложении HAVING , используя такие логические операторы, как OR и AND .

В следующем примере предложение HAVING используется для поиска заказов, общая сумма которых превышает 1000 и содержит более 600 элементов:

 

SELECT номер заказа, СУММ (количествоЗаказано) КАК itemsCount, СУММ (цена за каждый * заказанное количество) КАК Итого ИЗ Информация для заказа ГРУППА ПО номеру заказа ИМЕЮЩИЕ всего> 1000 И itemsCount> 600;

Язык кода: SQL (язык структурированных запросов) (sql)

Попробовать

Предположим, вы хотите найти все заказы, которые находятся в состоянии отгрузки и имеют общую сумму более 1500, вы можете присоединиться к Таблица orderdetails с таблицей orders с использованием предложения INNER JOIN и применением условия для столбца status и total aggregate, как показано в следующем запросе:

 

SELECT а. номер заказа, статус, СУММ (цена за каждый * заказанное количество) итого ИЗ подробности заказа Заказы INNER JOIN b ON b.ordernumber = a.ordernumber ГРУППА ПО номер заказа, статус ИМЕЮЩИЕ status = "Отправлено" И всего> 1500;

Язык кода: SQL (язык структурированных запросов) (sql)

Попробовать

Предложение 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 :

 

SELECT column_list ИЗ Т ГРУППА ПО c1 ИМЕЮЩИЕ group_condition;

Язык кода: SQL (язык структурированных запросов) (sql)

В этом операторе предложение 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 :

 

SELECT номер заказа, SUM (unit_price * количество) order_value ИЗ order_items ГРУППА ПО номер заказа СОРТИРОВАТЬ ПО order_value DESC;

Язык кода: SQL (язык структурированных запросов) (sql)

Вот результат:

Чтобы найти заказы, значения которых превышают 1 миллион, вы добавляете предложение HAVING следующим образом:

 

ВЫБРАТЬ номер заказа, SUM (unit_price * количество) order_value ИЗ order_items ГРУППА ПО номер заказа ИМЕЮЩИЕ SUM (unit_price * количество)> 1000000 СОРТИРОВАТЬ ПО order_value DESC;

Язык кода: SQL (язык структурированных запросов) (sql)

Результат:

В этом примере:

  • Во-первых, предложение GROUP BY группирует заказы по их идентификаторам и вычисляет значения порядка, используя функция СУММ () .
  • Затем предложение HAVING фильтрует все заказы, значения которых меньше или равны 1,000,000 .

B) Oracle

HAVING с примером сложного условия

Вы можете использовать сложное условие фильтрации в предложении HAVING для фильтрации групп.

Например, следующий оператор находит заказы, значения которых превышают 500000 , а количество продуктов в каждом заказе составляет от 10 до 12:

 

SELECT номер заказа, COUNT (item_id) item_count, SUM (unit_price * количество) итого ИЗ order_items ГРУППА ПО номер заказа ИМЕЮЩИЕ СУММ (цена_ единицы * количество)> 500000 И COUNT (item_id) МЕЖДУ 10 И 12 СОРТИРОВАТЬ ПО всего DESC, item_count DESC;

Язык кода: SQL (язык структурированных запросов) (sql)

Вот результат:

В этом руководстве вы узнали, как использовать предложение Oracle HAVING для фильтрации групп строк, возвращаемых Пункт GROUP BY .

Было ли это руководство полезным?

Предложение SQLite HAVING с практическими примерами

Резюме : в этом руководстве вы узнаете, как использовать предложение SQLite HAVING для указания условия фильтрации для группы или агрегата.

Введение в SQLite

Предложение HAVING

SQLite Предложение HAVING является необязательным предложением оператора SELECT . Предложение HAVING определяет условие поиска для группы.

Вы часто используете предложение HAVING с предложением GROUP BY . Предложение GROUP BY группирует набор строк в набор итоговых строк или групп. Затем предложение HAVING фильтрует группы на основе заданного условия.

Если вы используете предложение HAVING , вы должны включить предложение GROUP BY ; в противном случае вы получите следующую ошибку:

 

Ошибка: предложение GROUP BY требуется до HAVING

Язык кода: JavaScript (javascript)

Обратите внимание, что предложение HAVING применяется после GROUP BY предложение, тогда как предложение WHERE применяется перед предложением GROUP BY .

Ниже показан синтаксис предложения HAVING :

 

SELECT столбец_1, столбец_2, агрегатная_функция (столбец_3) ИЗ Таблица ГРУППА ПО столбец_1, столбец_2 ИМЕЮЩИЕ search_condition;

Язык кода: SQL (язык структурированных запросов) (sql)

В этом синтаксисе предложение HAVING оценивает search_condition для каждой группы как логическое выражение. Он включает группу в окончательный набор результатов, только если оценка верна.

SQLite

HAVING clause examples

Мы будем использовать таблицу track в образце базы данных для демонстрации.

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

 

SELECT альбумид COUNT (trackid) ИЗ треки ГРУППА ПО альбумид;

Язык кода: SQL (язык структурированных запросов) (sql)

Попробовать

Чтобы найти номера треков для альбома с идентификатором 1, мы добавляем предложение HAVING к следующему оператору:

 

ВЫБРАТЬ альбумид COUNT (trackid) ИЗ треки ГРУППА ПО альбумид ИМЕЮЩИЙ albumid = 1;

Попробовать

Мы сослались на столбец AlbumId в предложении HAVING .

Чтобы найти альбомы с количеством треков от 18 до 20, вы используете агрегатную функцию в предложении HAVING , как показано в следующем заявлении:

 

SELECT альбумид COUNT (trackid) ИЗ треки ГРУППА ПО альбумид ИМЕЮЩИЕ СЧЁТ (albumid) МЕЖДУ 18 И 20 ЗАКАЗАТЬ по albumid;

Язык кода: SQL (язык структурированных запросов) (sql)

Попробовать

SQLite

HAVING clause with INNER JOIN example

Следующий оператор запрашивает данные из дорожек и альбомов таблиц с использованием внутреннее соединение для поиска альбомов, общая длина которых превышает 60 000 000 миллисекунд.

 

ВЫБРАТЬ track.AlbumId, заглавие, СУММ (миллисекунды) как длина ИЗ треки ВНУТРЕННЕЕ ПРИСОЕДИНЕНИЕ к альбомам НА альбомах.AlbumId = track.AlbumId ГРУППА ПО track.AlbumId ИМЕЮЩИЕ длина> 60000000;

Язык кода: SQL (язык структурированных запросов) (sql)

Попробовать

В этом руководстве вы узнали, как использовать предложение 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.

Назад: СЧЁТ с группировкой по
Далее: Функция СУММ

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *