为什么得到错误ORA-00937

时间:2016-11-28 19:06:13

标签: sql oracle

  

对于获得三架以上飞机认证的每位飞行员,请找到   援助和他(或她)所用飞机的最大巡航范围   经过认证。

我有四张桌子

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 - “不是单组小组的功能”

1 个答案:

答案 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 
;

注意你在最内层的选择中有一个组;但你似乎错过了它 在最外面。

我同意你的意思是inequal会有多个EID被认证,如果这样你可能需要in vs =