0

我正在运行查询以查找最不常安排的服务并不断遇到错误 1111:无效使用组功能。我已尝试重新格式化查询几次,但无法解决问题。我应该使用不同的语法吗?

service 表包含 service_id、service_description 和 service_cost,scheduled_service 表包含 schedule_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 ;

我希望获得安排次数最少的服务。

4

2 回答 2

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
于 2019-04-08T21:40:37.893 回答
0

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

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;
于 2019-04-08T22:29:00.837 回答