2017-04-12 68 views
0

我有一個table emp (ename,eid,did,sal,sex)其中列確實是外鍵與另一個table dept (did,dname)我們不能使用選擇另一列max()在sql

我想獲得公司的max sal以及得到它的人的name and did

我執行以下查詢

select did,ename ,max(sal) from emp; 

但結果是:

ORA-00937:不是單組分組函數

所以我的問題是可以」我有超過1列嗎?

回答

2

你將不得不組的結果由sal柱:

select did,ename,max(sal) from emp group by sal 
+1

如預期在Oracle中,這可能無法正常工作,儘管它可能在MySQL工作。 –

+0

你是對的Tim.My的意圖是有每個部門的最大值。 –

2

不能使用MAX聚合函數這樣。使用MAX而不使用GROUP BY子句將只返回一個記錄,其最大值爲sal。您不允許在SELECT子句中放置更多非聚合字段。

如果你想獲得具有最大sal值的記錄,那麼你必須做一個自連接:

select e1.* 
from emp as e1 
inner join (
    select max(sal) as max_sal 
    from emp 
) as e2 on e1.sal = e2.max_sal 

注:上面的查詢將表emp返回多個記錄,以防萬一以上記錄共享相同的最大值sal

編輯:

如果你想獲得頂薪每個部門那麼你必須包括在派生表GROUP BY子句中使用:

select e1.* 
from emp as e1 
inner join (
    select did, max(sal) as max_sal 
    from emp 
    group by did 
) as e2 on e1.did = e2.did and e1.sal = e2.max_sal 
0

MAX工作在組在GROUP BY子句中指定,並找出每個組的最大值。如果未指定要分組的一組列,則會找到整個結果集的最大值。

你需要找到最大SAL,那麼你就可以查詢匹配的行:

select did, ename, sal 
from emp 
where sal = (select max(sal) from emp)