如何找到提供最多服务的crew_chief?

时间:2018-04-15 05:11:44

标签: mysql

我需要找到提供最多服务的机组负责人。我有下表:

CREATE TABLE JasperGreen.PROVIDED_SERVICE (
    PROVISION INT AUTO_INCREMENT NOT NULL,
    CONTRACT_ID INT NOT NULL,
    PROVISION_DATE DATE NOT NULL,
    CREW_CHIEF INT NOT NULL,
    CUST_ID INT NOT NULL,
    CONSTRAINT PROVIDED_SERVICE_FK1 FOREIGN KEY(CUST_ID) REFERENCES CUSTOMER(CUST_ID),
    CONSTRAINT PROVIDED_SERVICE_FK2 FOREIGN KEY(CONTRACT_ID) REFERENCES CONTRACTED_SERVICE(CONTRACT_ID),
    CONSTRAINT PROVIDED_SERVICE_PK PRIMARY KEY (PROVISION)
);

到目前为止,我运行了此查询并返回错误:

SELECT CREW_CHIEF, COUNT(provision)
FROM PROVIDED_SERVICE
WHERE provision = 
    (SELECT MAX(COUNT(provision)) FROM PROVIDED_SERVICE)
  

错误1111:无效使用组功能。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

select CREW_CHIEF, count(provision)
from PROVIDED_SERVICE
GROUP BY CREW_CHIEF
ORDER BY count(provision) DESC
LIMIT 1

您无法嵌套MAXCOUNT。如果你想使用你的方法,需要通过

添加组
select CREW_CHIEF, count(provision)
from PROVIDED_SERVICE
group by CREW_CHIEF
HAVING count(provision) = 
       (select count(provision)  
        from PROVIDED_SERVICE
        group by CREW_CHIEF
        order by count(provision) desc
        limit 1
       )

编辑:

蒂姆指出。第一个查询返回一个随机厨师,以防万一。第二个返回所有厨师与最大数量的关系。

答案 1 :(得分:0)

如果你只想要一位顶级厨师,胡安的回答是好的,或者,如果你想获得第一名,你就不会关心哪位厨师会回来。继续您目前的方法,我们可以让所有厨师都处于第一位,包括领带:

SELECT CREW_CHIEF, COUNT(*) AS cnt
FROM PROVIDED_SERVICE
GROUP BY CREW_CHIEF
HAVING COUNT(*) = (
    SELECT MAX(cnt) FROM (
        SELECT COUNT(*) AS cnt FROM PROVIDED_SERVICE GROUP BY CREW_CHIEF) t );

Demo