我在練習sql,並且遇到了這個問題。我不確定的SQL邏輯,更具體地說,它似乎是我完全錯誤使用組。SQL錯誤,組的錯誤執行
問題: 在同一年齡段的所有員工中打印薪金最高的員工的姓名和年齡。
employee(sid, sname, sex, age, year, salary)
第一次嘗試:
select E.sname, E.age
from employee E
where E.salary= max(E.salary)
group by E.sname, E.age
Error: Invalid SQL: ORA-00934: group function is not allowed here
第二次嘗試
select E.sname, E.age
from employee E
group by E.sname, E.age
having E.salary= max(E.salary)
Error: Invalid SQL: ORA-00979: not a GROUP BY expression
使用子選擇來獲得最高工資。 – jarlh
@jarih你能解釋我的實現有什麼問題嗎? – Sam
@Sam它是無效的SQL - WHERE在分組之前執行,所以你不能有一個聚合,'HAVING'只適用於分組表達式或聚合。您必須使用其他方法(子選擇,分區等)來獲取每個組中具有最高值的記錄。 –