MySQL: мне нужен hel p Подзапрос

0

Привет, У меня есть проблема с этим подзапросом, что я хотел бы знать клиентов с большим количеством оговорок к их имени, если это возможно, без использования ORDER BY.. DESC LIMIT 1;

У меня есть этот код:

SELECT  c.client_id, COUNT(r.reserva_id)
    FROM reserves r
INNER JOIN clients c ON c.client_id = r.client_id
GROUP BY c.client_id
HAVING COUNT(r.reserva_id) < (SELECT COUNT(r2.reserva_id) 
                        FROM reserves r2
                     GROUP BY r2.client_id)

Но это не работает. Вы можете мне помочь

Спасибо..

  • 1
    Пожалуйста, включите пример данных.
  • 0
    SELECT c.client_id, COUNT (r.reservation_id) ИЗ резервирований r ВНУТРЕННИЕ РЕГИСТРАЦИОННЫЕ клиенты c ON c.client_id = r.client_id GROUP BY c.client_id HAVING COUNT (r.reservation_id) <(ВЫБЕРИТЕ COUNT (r2.reservation_id) ОТ резервирования r2 GROUP BY r2.client_id)
Показать ещё 2 комментария
Теги:
subquery

2 ответа

0
Лучший ответ

Попробуй это:

-- WITH ORDER BY COUNT(r.reserva_id) DESC LIMIT 1
SELECT  c.client_id, COUNT(r.reserva_id) 'count'
FROM reserves r
INNER JOIN clients c ON c.client_id = r.client_id
GROUP BY c.client_id
ORDER BY 2 DESC
LIMIT 1;

-- WITH SUB QUERIES
SELECT B.*
FROM
(SELECT  c.client_id, COUNT(r.reserva_id) 'count'
FROM reserves r
INNER JOIN clients c ON c.client_id = r.client_id
GROUP BY c.client_id) B WHERE B.'count'=
(SELECT MAX(A.'count')
FROM
(SELECT  c.client_id, COUNT(r.reserva_id) 'count'
FROM reserves r
INNER JOIN clients c ON c.client_id = r.client_id
GROUP BY c.client_id) A);

Посмотрите, как это работает на SQL Fiddle.

Для меня просто пойти с первым запросом, его просто понять и запустить.

  • 0
    Когда я их выполняю, я получаю эту ошибку. Таблица db_hotels.A не существует
  • 0
    Я только отредактировал свой ответ
0

Во-первых, join не требуется для запрошенного вами запроса.

Во-вторых, я могу интерпретировать ваш вопрос как "клиентов с большинством оговорок". Логика в текущем запросе не приближается к этому.

Но для этой версии запроса это будет:

SELECT  r.client_id, COUNT(*)
FROM reserves r
GROUP BY r.client_id
HAVING COUNT(*) = (SELECT COUNT(*) 
                   FROM reserves r2
                   GROUP BY r2.client_id
                   ORDER BY COUNT(*) DESC
                   LIMIT 1
                  );

Если вы действительно хотите избежать ORDER BY/LIMIT 1 в подзапросе, вы можете сделать:

SELECT  r.client_id, COUNT(*)
FROM reserves r
GROUP BY r.client_id
HAVING COUNT(*) = (SELECT MAX(cnt)
                   FROM (SELECT COUNT(*) 
                         FROM reserves r2
                         GROUP BY r2.client_id
                        ) r2
                   );

Ещё вопросы

Сообщество Overcoder
Наверх
Меню