Привет, У меня есть проблема с этим подзапросом, что я хотел бы знать клиентов с большим количеством оговорок к их имени, если это возможно, без использования 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)
Но это не работает. Вы можете мне помочь
Спасибо..
Попробуй это:
-- 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.
Для меня просто пойти с первым запросом, его просто понять и запустить.
Во-первых, 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
);