MySQL выдает ошибку 1111, когда я пытаюсь выполнить свой запрос, как я могу исправить свою группу с помощью предложений? - PullRequest
0 голосов
/ 09 апреля 2019

Я выполняю запрос, чтобы определить, какая служба была запланирована реже всего, и продолжаю сталкиваться с ошибкой 1111: недопустимое использование групповой функции.Я пытался переформатировать мой запрос несколько раз и не могу решить проблему.Есть ли другой синтаксис, который я должен использовать?

Таблица служб содержит service_id, service_description и service_cost, а таблица schedule_service содержит schedule_service_id, meeting_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 ;

Я ожидаю получить услугу, запланированную наименьшее количество раз.

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

Вы можете 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
0 голосов
/ 09 апреля 2019

Если вы хотите меньше всего, вы можете использовать:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...