MySQL在我尝试运行查询时抛出错误1111,我如何通过和having子句修复我的组?

MySQL在我尝试运行查询时抛出错误1111,我如何通过和having子句修复我的组?,mysql,sql,Mysql,Sql,我正在运行一个查询,以查找哪个服务的调度频率最低,并一直运行到错误1111:组函数的使用无效。我曾多次尝试重新格式化我的查询,但无法解决该问题。我应该使用不同的语法吗 服务表包含服务id、服务描述和服务成本,计划服务表包含计划服务id、约会id和服务id。我多次尝试重新编写查询,但都出现相同的错误 这是我最近的一次尝试 SELECT s.service_id, COUNT(ss.scheduled_service_id) AS ' # Scheduled' FROM service s JOI

我正在运行一个查询,以查找哪个服务的调度频率最低,并一直运行到错误1111:组函数的使用无效。我曾多次尝试重新格式化我的查询,但无法解决该问题。我应该使用不同的语法吗

服务表包含服务id、服务描述和服务成本,计划服务表包含计划服务id、约会id和服务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

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

如果您希望最少使用,可以使用:

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;
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;
此查询实际上不需要联接,因此您可以执行以下操作:

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;
除非您想计算已计划为零次的服务。在这种情况下,您需要左连接:


如果您希望最少使用,可以使用:

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;
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;