MySQL在我尝试运行查询时抛出错误1111,我如何通过和having子句修复我的组?
我正在运行一个查询,以查找哪个服务的调度频率最低,并一直运行到错误1111:组函数的使用无效。我曾多次尝试重新格式化我的查询,但无法解决该问题。我应该使用不同的语法吗 服务表包含服务id、服务描述和服务成本,计划服务表包含计划服务id、约会id和服务id。我多次尝试重新编写查询,但都出现相同的错误 这是我最近的一次尝试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
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;