Count mysql having: HAVING оператор MySQL — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite

HAVING оператор MySQL — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite

В этом учебном пособии вы узнаете, как использовать MySQL оператор HAVING с синтаксисом и примерами.

Описание

MySQL оператор HAVING используется в сочетании с оператором GROUP BY, чтобы ограничить группы возвращаемых строк только тех, чье условие TRUE.

Синтаксис

Синтаксис оператора HAVING в MySQL:

SELECT expression1, expression2, … expression_n,
aggregate_function (expression)
FROM tables
[WHERE conditions]
GROUP BY expression1, expression2, … expression_n
HAVING condition;

Параметры или аргументы

aggregate_function — функция, такая как функции SUM, COUNT, MIN, MAX или AVG.
expression1, expression2, … expression_n — выражения, которые не заключены в агрегированную функцию и должны быть включены в предложение GROUP BY.
WHERE conditions — необязательный. Это условия для выбора записей.
HAVING condition — Это дополнительное условие применяется только к агрегированным результатам для ограничения групп возвращаемых строк. В результирующий набор будут включены только те группы, состояние которых соответствует TRUE.

Пример использования функции SUM

Рассмотрим пример MySQL оператора HAVING, в котором используется функция SUM.

Вы также можете использовать функцию SUM, чтобы вернуть имя product и общее количество (для этого product). MySQL оператор HAVING будет фильтровать результаты так, чтобы возвращались только product с общим количеством больше 10.

SELECT product, SUM(quantity) AS «Total quantity» FROM order_details GROUP BY product HAVING SUM(quantity) > 10;

SELECT product, SUM(quantity) AS «Total quantity»

FROM order_details

GROUP BY product

HAVING SUM(quantity) > 10;

Пример использования функции COUNT

Рассмотрим, как мы можем использовать оператор HAVING с функцией COUNT в MySQL.

Вы можете использовать функцию COUNT, чтобы вернуть имя product и количество заказов (для этого product), которые находятся в категории ‘produce’. MySQL оператор HAVING будет фильтровать результаты так, чтобы возвращались только product с более чем 20 заказами.

SELECT product, COUNT(*) AS «Number of orders» FROM order_details WHERE category = ‘produce’ GROUP BY product HAVING COUNT(*) > 20;

SELECT product, COUNT(*) AS «Number of orders»

FROM order_details

WHERE category = ‘produce’

GROUP BY product

HAVING COUNT(*) > 20;

Пример использования функции MIN

Рассмотрим, как мы можем использовать оператор HAVING с функцией MIN в MySQL.

Вы также можете использовать функцию MIN, чтобы вернуть имя каждого department и минимальную зарплату в department. MySQL оператор HAVING будет возвращать только те department, где минимальная зарплата составляет менее 50000 биткоинов :).

SELECT department, MIN(salary) AS «Lowest salary» FROM employees GROUP BY department HAVING MIN(salary) < 50000;

SELECT department, MIN(salary) AS «Lowest salary»

FROM employees

GROUP BY department

HAVING MIN(salary) < 50000;

Пример использования функции MAX

Наконец, давайте посмотрим, как мы можем использовать оператор HAVING с функцией MAX в MySQL.
Например, вы также можете использовать функцию MAX для возврата имени каждого department и максимальной заработной платы в department. Предложение MySQL HAVING будет возвращать только те department, чья максимальная заработная плата превышает 25000 биткоинов :).

SELECT department, MAX(salary) AS «Highest salary» FROM employees GROUP BY department HAVING MAX(salary) > 25000;

SELECT department, MAX(salary) AS «Highest salary»

FROM employees

GROUP BY department

HAVING MAX(salary) > 25000;

Команда HAVING — условие для GROUP BY

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

См. также команду WHERE, которая задает условие на выборку записей.

Синтаксис

GROUP BY поле HAVING условие

Примеры

Все примеры будут по этой таблице workers, если не сказано иное:

id
айди
name
имя
age
возраст
salary
зарплата
1 Дима 23 100
2 Петя 23 200
3 Вася 23 300
4 Коля 24 1000
5 Иван 24 2000
6 Кирилл 25 1000

Пример

В данном примере демонстрируется работа GROUP BY без условия HAVING:

SELECT age, SUM(salary) as sum FROM workers GROUP BY age

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

age
возраст
sum
сумма
23 600
24 3000
25 1000

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

SELECT age, SUM(salary) as sum FROM workers GROUP BY age HAVING sum>=1000

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

age
возраст
sum
сумма
24 3000
25 1000

Пример

Подсчитаем с помощью функции COUNT количество записей в группе (не используя HAVING):

SELECT age, COUNT(*) as count FROM workers GROUP BY age

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

age
возраст
count
количество
23 3
24 2
25 1

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

SELECT age, COUNT(*) as count FROM workers GROUP BY age HAVING count

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

age
возраст
count
количество
24 2
25 1

Аналогичного эффекта можно достигнуть, если воспользоваться командой IN:

SELECT age, COUNT(*) as count FROM workers GROUP BY age HAVING count IN(1,2)

Можно также использовать команду BETWEEN:

SELECT age, COUNT(*) as count FROM workers GROUP BY age HAVING count BETWEEN 1 AND 2

Как вы видите, в HAVING допустимы все команды, используемые в условии WHERE.

полезный трюк с count() и count(distinct) / Песочница / Хабр

Хочу поделиться одним интересным решением, к которому мне удалось прийти сегодня во время оптимизации запроса поиска пользователей. В выборке необходимо было возвращать количество общих групп текущего пользователя и меня — того, кто производит поиск. Что называется total shared groups. В итоге всё поместилось в один компактный запрос без подзапросов (что очень критично, позже объясню почему) с использованием одной таблицы в FROM, без GROUP BY и HAVING.

Представим задачу более наглядно. Примем следующие таблицы:
— group (group_id)
— user (user_id)
— user_group (хранит связки user_id-group_id)

Необходимо узнать количество групп, в котором состоят пользователи user1 и user2. То есть найти пересечения между юзерами по таблице user_group.

1. Следующий запрос выдаст количество всех записей из таблицы user_group, которые принадлежат юзерам user1 и user2.
SELECT
COUNT(`group_id`)
FROM
`user_group`
WHERE
`user_id` IN (:user1,:user2)

2. А вот этот запрос выдаст количество записей из таблицы user_group, которые принадлежат юзерам user1 и user2, но с уникальным group_id:

SELECT
COUNT(DISTINCT `group_id`)
FROM
`user_group`
WHERE
`user_id` IN (:user1,:user2)

В данном случае, если нашлись такие группы, которые были привязаны сразу к двум нашим пользователям, то они будут «схлопнуты» в одну строку.

3. В итоге приходим к виду:
SELECT
COUNT(`group_id`) - COUNT(DISTINCT `group_id`)
FROM
`user_group`
WHERE
`user_id` IN (:user1,:user2)

Если отнять общее число групп двух пользователей и число групп, с учётом уникальности group_id, то в рузультате получим наше искомое total shared groups — сколько общих групп у двух пользователей.

Как ещё можно было решить задачу?
SELECT
COUNT(*)
FROM
(
SELECT
`group_id`

FROM
`user_group`
WHERE
`user_id` IN (:user1,:user2)
GROUP BY
`group_id`
HAVING
COUNT(*) > 1
) as `shared_groups`

Такой подход я встречал довольно часто. Но у него есть один существенный минус — использование подзапроса. Если :user1 или :user2 не передаются в запрос, а подставляются динамически из запроса верхнего уровня (например, какой-нибудь `user1`.`user_id`), то данный вариант выдаст ошибку.

MySQL функция COUNT — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite

В этом учебном пособии вы узнаете, как использовать MySQL функцию COUNT с синтаксисом и примерами.

Описание

MySQL функция COUNT возвращает количество выражений.

Синтаксис

Синтаксис MySQL функции COUNT:

SELECT COUNT(aggregate_expression)
FROM tables

[WHERE conditions];

ИЛИ синтаксис для функции COUNT при группировке результатов по одному или нескольким столбцам:

SELECT expression1, expression2, … expression_n,
COUNT(aggregate_expression)
FROM tables
[WHERE conditions]
GROUP BY expression1, expression2, … expression_n;

Параметры или аргументы

expression1, expression2, … expression_n — выражения, которые не инкапсулированы в функции COUNT и должны быть включены в предложение GROUP BY в конце SQL запроса.

aggregate_expression — это столбец или выражение, чьи ненулевые значения будут подсчитаны.

tables — таблицы, из которых вы хотите получить записи. Должна быть хотя бы одна таблица, указанная в предложении FROM.

WHERE conditions — необязательный. Это условия, которые должны быть выполнены для выбранных записей.

Включает только значения NOT NULL

Не все это понимают, но функция COUNT будет включать только те записи, где значение выражения COUNT ( expression ) не равно NULL. Когда выражение содержит значение NULL, оно не включается в вычисления COUNT.

Рассмотрим пример функции COUNT, демонстрирующий, как значения NULL оцениваются функцией COUNT.

Например, если у вас есть следующая таблица под названием suppliers:

supplier_idsupplier_namestate
1AppleNY
2Meat
3Cheese

И если вы запустите следующий оператор SELECT, который использует функцию COUNT:

SELECT COUNT(supplier_id) FROM suppliers;

SELECT COUNT(supplier_id)

  FROM suppliers;

Этот пример COUNT вернет 3 строки, поскольку все значения supplier_id в наборе результатов запроса NOT NULL.

Однако если вы запустили следующий оператор SELECT, который использует функцию COUNT:

SELECT COUNT(state) FROM suppliers;

SELECT COUNT(state)

  FROM suppliers;

Этот пример COUNT будет возвращать только 1 строку, поскольку только одно значение state в результирующем наборе запроса NOT NULL. Это будет первая строка, где state = ‘NY’. Это единственная строка, которая включена в расчет функции COUNT.

Применение

Функция COUNT может использоваться в следующих версиях MySQL:

  • MySQL 5.7, MySQL 5.6, MySQL 5.5, MySQL 5.1, MySQL 5.0, MySQL 4.1, MySQL 4.0, MySQL 3.23

Пример с одним выражением

Рассмотрим примеры MySQL функции COUNT, чтобы понять, как использовать функцию COUNT в MySQL.

Например вы можете узнать, сколько сотрудников имеют salary (зарплату) выше 25 000 долларов в год:

SELECT COUNT(*) AS «Количество сотрудников» FROM employees WHERE salary > 25000;

SELECT COUNT(*) AS «Количество сотрудников»

  FROM employees

WHERE salary > 25000;

В этом примере функции COUNT, выражению COUNT (*) присвоили алиас «Количество сотрудников». В результирующем наборе в качестве имени поля будет отображаться «Количество сотрудников».

Пример с использованием DISTINCT

Вы можете использовать предложение DISTINCT в функции COUNT. Например, приведенный ниже SQL запрос возвращает количество уникальных отделов, в которых хотя бы один сотрудник зарабатывает более 35 000 долларов в год.

SELECT COUNT(DISTINCT department) AS «Unique departments» FROM employees WHERE salary > 35000;

SELECT COUNT(DISTINCT department) AS «Unique departments»

  FROM employees

WHERE salary > 35000;

Пример с использованием GROUP BY

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

Например, вы можете использовать функцию COUNT, чтобы вернуть department (отдел) и number of employees (количество сотрудников в связанном отделе), которые находятся в state (штате) «NY».

SELECT department, COUNT(*) AS «Number of employees» FROM employees WHERE state = ‘CA’ GROUP BY department;

SELECT department, COUNT(*) AS «Number of employees»

  FROM employees

WHERE state = ‘CA’

GROUP BY department;

Поскольку вы указали один столбец в своем операторе SELECT, который не инкапсулирован в функцию COUNT, вы должны использовать предложение GROUP BY. Поэтому поле department должно быть указано в разделе GROUP BY.

агрегатных функций — MySQL с предложением и Count ()

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. Реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании

Загрузка…

.

MySQL ИМЕЕТ

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

В этом синтаксисе вы указываете условие в предложении 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, СУММА (цена за каждый * заказанное количество) КАК Итого ОТ Информация для заказа ГРУППА ПО номеру заказа;

Попробовать

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

 

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

Попробовать

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

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

 

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

Попробовать

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

 

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

Попробовать

Предложение HAVING полезно только тогда, когда вы используете его с предложением GROUP BY для генерации вывода отчетов высокого уровня. Например, вы можете использовать предложение HAVING , чтобы ответить на такие вопросы, как определение количества заказов в этом месяце, этом квартале или этом году, общий объем продаж которых превышает 10K.

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

  • Было ли это руководство полезным?
  • Да Нет
.

count — mysql Max, имеющий несколько экземпляров

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. Реклама Обратитесь к разработчикам и технологам со всего мира
.

MySQL COUNT ()

Агрегатная функция COUNT () возвращает количество строк в наборе результатов оператора SELECT .

Результатом COUNT () является значение BIGINT .

Если совпадающих строк нет, возвращается значение 0 .

Пример:

ВЫБРАТЬ СЧЕТЧИК (*) ОТ сакилы.актер;

Результат:

Это говорит нам о 204 записях в таблице субъект базы данных sakila .

Если мы добавим предложение WHERE , мы сможем сузить набор результатов. Как это:

ВЫБРАТЬ СЧЕТЧИК (*) ОТ sakila.actor ГДЕ first_name как «B%»;

Результат:

В приведенном выше примере показано, что имеется 10 записей, в которых значение поля first_name начинается с буквы «B».

Вы можете видеть, что если мы удалим функцию COUNT (*) , мы получим список всех возвращенных записей. Подсчитав количество строк, мы видим, что было возвращено 10 записей.

ВЫБРАТЬ * ОТ sakila.actor ГДЕ first_name как «B%»;

Результат:

Варианты

Функцию COUNT () можно использовать по-разному.Вы можете получить разные результаты в зависимости от того, как вы его используете, поэтому стоит понять, как это работает.

COUNT ( выражение )

Возвращает количество строк, содержащих значения, отличные от NULL .

В следующем примере извлекаются все записи, в которых поле last_name не содержит значения NULL :

ВЫБРАТЬ СЧЕТЧИК (фамилия) ОТ сакилы.актер;

СЧЕТ (*)

Возвращает количество строк в результирующем наборе независимо от того, содержат ли они NULL значений.

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

ВЫБРАТЬ СЧЕТЧИК (*) ОТ сакилы.актер

COUNT (DISTINCT выражение )

Ключевое слово DISTINCT удаляет повторяющиеся записи. Таким образом, это возвращает количество уникальных строк, которые не содержат значений NULL .

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

ВЫБРАТЬ СЧЕТЧИК (РАЗЛИЧИЕ last_name) ОТ sakila.actor;

Вы можете использовать COUNT () с предложением GROUP BY , чтобы обеспечить количество записей в каждой группе.

Пример:

ВЫБЕРИТЕ last_name, COUNT (*) ОТ сакилы.актер ГРУППА ПО last_name;

Результат:

В приведенном выше примере сгруппированы все фамилии и указано количество каждой из них. Например, мы видим, что три актера имеют фамилию ALLEN , только у одного ASTAIRE и т. Д.

ИМЕЕТ пункт

Вы можете добавить предложение HAVING в предложение GROUP BY для дальнейшей фильтрации результатов.

Здесь мы добавляем предложение HAVING с другой функцией COUNT () , чтобы возвращать только те записи, у которых счетчик больше 3:

ВЫБЕРИТЕ last_name, COUNT (*) ОТ sakila.actor ГРУППА ПО last_name ИМЕЕТ СЧЕТ (*)> 3;

Результат:

Контроль потока

Вы можете объединить COUNT () с функциями управления потоком для большей функциональности.Например, вы можете использовать функцию IF () как часть выражения, которое будет использоваться в функции COUNT () . Это может быть очень полезно для быстрой разбивки данных в базе данных.

Рассмотрим эти данные в фильме таблица:

Вы можете видеть, что есть поле с названием length , и длина каждого фильма записана в этом поле.

Таким образом, мы можем использовать это поле для следующих действий:

ВЫБРАТЬ COUNT (IF (length <80,1; NULL)) 'Короткий', COUNT (IF (length BETWEEN 80 AND 120,1; NULL)) 'Средний', COUNT (IF (длина> 120,1; NULL)) ‘Длинный’ ИЗ пленки;

Результат:

Приведенный выше оператор разделяет результаты на три группы; Short , Medium и Long , в зависимости от длины пленки.Мы используем функцию IF () для сравнения длины пленки с заданным выражением, и в зависимости от результата она возвращает 1 или NULL . Если он вернет 1 , он будет засчитан под заголовком столбца, который мы назвали ( Short , Medium или Long ).

В примерах на этой странице используется образец базы данных Sakila.

.

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

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