对于获得三架以上飞机认证的每位飞行员,请找到 援助和他(或她)所用飞机的最大巡航范围 经过认证。
我有四张桌子
FLIGHTS( flno :varchar,ffrom:varchar,fto:varchar,distance:integer,departs:date,Arrives:date);
AIRCRAFT(援助:varchar,aname:varchar,Cruisingrange:number);
员工( eid :varchar,Ename:varchar,薪水:数字);
CERTIFIED(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 - “不是单组小组的功能”
答案 0 :(得分:2)
在外部选择中缺少组。 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被认证,如果这样你可能需要in
vs =