#mysql #sql
#mysql #sql
Вопрос:
Я запускаю запрос, чтобы найти, какая служба была запланирована реже всего, и продолжаю сталкиваться с ошибкой 1111: недопустимое использование функции group . Я несколько раз пытался переформатировать свой запрос и не могу решить проблему. Есть ли другой синтаксис, который я должен использовать?
Таблица service содержит service_id, service_description и service_cost, а таблица scheduled_service содержит scheduled_service_id, appointment_id и service_id. Я несколько раз пытался изменить формулировку своего запроса, и все они выдают мне одну и ту же ошибку.
Это моя последняя попытка.
SELECT s.service_id, COUNT(ss.scheduled_service_id) AS ' # Scheduled'
FROM service s JOIN scheduled_service ss
ON s.service_id = ss.service_id
GROUP BY service_id
HAVING COUNT(ss.scheduled_service_id) =
(SELECT MIN(COUNT(scheduled_service_id)) FROM scheduled_service GROUP BY service_id);
Я могу получить количество для всех служб, выполняемых с помощью этого запроса, но попытка изменить его, чтобы дать мне только минимум, — это то, что я не могу сделать.
SELECT service_id, COUNT(scheduled_service_id) AS '# Scheduled'
FROM scheduled_service
GROUP BY service_id ;
Я ожидаю получить службу, которая была запланирована наименьшее количество раз.
Ответ №1:
Вы можете ORDER BY
подсчитать, а затем LIMIT
количество возвращенных строк до 1.
SELECT s.service_id, COUNT(ss.scheduled_service_id) AS ' # Scheduled'
FROM service s JOIN scheduled_service ss
ON s.service_id = ss.service_id
GROUP BY service_id
ORDER BY COUNT(ss.scheduled_service_id)
LIMIT 1
Ответ №2:
Если вы хотите использовать наименее часто, вы можете использовать:
SELECT s.service_id,
COUNT(ss.scheduled_service_id) as num_scheduled
FROM service s JOIN
scheduled_service ss
ON s.service_id = ss.service_id
GROUP BY s.service_id
ORDER BY num_scheduled ASC
LIMIT 1;
Этот запрос на самом деле не требует JOIN
, поэтому вы можете сделать:
SELECT ss.service_id,
COUNT(ss.scheduled_service_id) as num_scheduled
FROM scheduled_service ss
GROUP BY ss.service_id
ORDER BY num_scheduled ASC
LIMIT 1;
Если вы не хотите подсчитывать службы, которые были запланированы с нулевым временем. В этом случае вы хотите LEFT JOIN
:
Если вы хотите использовать наименее часто, вы можете использовать:
SELECT s.service_id,
COUNT(ss.scheduled_service_id) as num_scheduled
FROM service s LEFT JOIN
scheduled_service ss
ON s.service_id = ss.service_id
GROUP BY s.service_id
ORDER BY num_scheduled ASC
LIMIT 1;