小编典典

为什么会出现错误ORA-00937

sql

对于每位获得三架以上飞机认证的飞行员,请找到他(或她)经认证的飞机的辅助设备和最大续航范围。

我有四个桌子

航班( flno :varchar, ffrom
:varchar,fto:varchar,distance:integer,departs:date,Arrives:date);

AIRCRAFT( aid :varchar,aname:varchar,Cruisingrange:number);

EMPLOYEES( eid :varchar,Ename:varchar,Salary:number);

已认证(eid:varchar,aid:varchar);

我的查询:

SELECT aname, MAX(cruisingrange)
FROM   Aircraft 
WHERE aid IN(SELECT aid 
         FROM Certified
         WHERE eid = (SELECT eid
                      FROM Certified
                      GROUP BY eid
                      HAVING COUNT(eid) > 3) ) 
;

但这会导致此错误:

ORA 00937. 00000-“不是单个组的组函数”


阅读 285

收藏
2021-04-15

共1个答案

小编典典

在外部选择中缺少分组依据。select语句中的所有非聚合必须在分组依据中列出。

SELECT aname, MAX(cruisingrange)
FROM   Aircraft 
WHERE aid IN(SELECT aid 
         FROM Certified
         WHERE eid in (SELECT eid
                      FROM Certified
                      GROUP BY eid
                      HAVING COUNT(eid) > 3) )
GROUP BY aname 
;

请注意,您在最里面的选择上有一个分组依据。但您似乎在最外层想念它。

我也同意你的意思inequal将不止一个EID是认证的,如果这样,你可能需要inVS=

2021-04-15