SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 Сегодня 17:13:37

jenia0jenia
Участник
Зарегистрирован: 28.01.2026
Сообщений: 3

having и having max(arg)...

Друзья, объясните, пожалуйста, почему

SELECT client_name
FROM orders
JOIN clients USING(client_id)
GROUP BY client_id, client_name
HAVING COUNT(*) = 1
   AND MIN(order_date) = '2022-01-05'
   AND MAX(order_date) = '2022-01-05';


ошибк не выдаст, а


...

HAVING COUNT(*) = 1
   AND order_date = '2022-01-05';


выдаст?

Заранее спасибо за ответ

Отредактированно jenia0jenia (Сегодня 17:14:18)

Неактивен

 

#2 Сегодня 17:50:15

estic
Завсегдатай
Зарегистрирован: 01.10.2022
Сообщений: 30

Re: having и having max(arg)...

При группировке у вас будут группы, а не обычные записи. Не понятно, какое значение из группы брать для сравнения (у одного пользователя могут быть разные order_date). Если все равно, какое значение использовать (но тогда какой смысл сравнивать?), можно указать агрегат ANY_VALUE(). Если нужно отобрать записи по order_date, используйте условие в выражении WHERE, а не HAVING.

Неактивен

 

#3 Сегодня 18:37:38

jenia0jenia
Участник
Зарегистрирован: 28.01.2026
Сообщений: 3

Re: having и having max(arg)...

estic написал:

При группировке у вас будут группы, а не обычные записи. Не понятно, какое значение из группы брать для сравнения (у одного пользователя могут быть разные order_date). Если все равно, какое значение использовать (но тогда какой смысл сравнивать?), можно указать агрегат ANY_VALUE(). Если нужно отобрать записи по order_date, используйте условие в выражении WHERE, а не HAVING.

ищу клинета, совершившего только один заказ и только '2022-01-05'.

SELECT client_name
FROM orders
JOIN clients USING(client_id)
WHERE order_date = '2022-01-05'
GROUP BY client_id, client_name
HAVING COUNT(*) = 1


такой вот запрос не подойдёт.

Задачка учебная

Отредактированно jenia0jenia (Сегодня 18:40:44)

Неактивен

 

#4 Сегодня 18:39:37

jenia0jenia
Участник
Зарегистрирован: 28.01.2026
Сообщений: 3

Re: having и having max(arg)...

estic написал:

При группировке у вас будут группы

поэтому я могу использовать order_date в функции min-max , а без них не могу?

Неактивен

 

#5 Сегодня 20:37:24

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5850

Re: having и having max(arg)...

Да. В части HAVING без группирующих функций можно указывать только те поля, по которым идет группировка (у вас это  client_id, client_name)
Кстати, зачем вы делаете группировку ещё и по client_name? client_id ведь уникально.
Условие достаточно только одно: на min или max.

SELECT client_name
FROM orders
JOIN clients USING(client_id)
GROUP BY client_id
HAVING COUNT(*) = 1
   AND MIN(order_date) = '2022-01-05';

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson