我有一個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列嗎?
我有一個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列嗎?
你將不得不組的結果由sal
柱:
select did,ename,max(sal) from emp group by sal
不能使用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
MAX
工作在組在GROUP BY
子句中指定,並找出每個組的最大值。如果未指定要分組的一組列,則會找到整個結果集的最大值。
你需要找到最大SAL,那麼你就可以查詢匹配的行:
select did, ename, sal
from emp
where sal = (select max(sal) from emp)
如預期在Oracle中,這可能無法正常工作,儘管它可能在MySQL工作。 –
你是對的Tim.My的意圖是有每個部門的最大值。 –