对于每位获得三架以上飞机认证的飞行员,请找到他(或她)经认证的飞机的辅助设备和最大续航范围。
我有四个桌子
航班( 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-“不是单个组的组函数”
在外部选择中缺少分组依据。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 ;
请注意,您在最里面的选择上有一个分组依据。但您似乎在最外层想念它。
我也同意你的意思in或equal将不止一个EID是认证的,如果这样,你可能需要inVS=
in
equal
=