2016-03-07 47 views
4
EmpID EmpName EmpSalary EmpDept 
1  Steve 5000  HR 
2  Robert 5000  Management 
3  Brad  3000  HR 
4  Sam  4000  HR 
5  Dave  2000  Management 
6  Stuvart 4500  Management 

如何從EMPLOYEE表其薪水最高,他是屬於人力資源部門得到員工詳細信息...我的查詢是

SELECT EmpID,EmpName,EmpSalary,EmpDept 
FROM EMPLOYEE 
WHERE EmpSalary IN (select max(EmpSalary) from EMPLOYEE) 
AND EMPDEPT='HR' 

我嘗試了上述查詢,它給了我準確的結果,但由於性能問題,我無法使用內部查詢。

回答

2

您可以使用order by子句rownum甲骨文版本< 12C

SELECT EmpID, EmpName, EmpSalary, EmpDept 
FROM EMPLOYEE 
WHERE ROWNUM = 1 AND EMPDEPT = 'HR' 
ORDER BY EmpSalary DESC 

否則,您可以使用以下方法:

SELECT EmpID, EmpName, EmpSalary, EmpDept 
FROM EMPLOYEE 
WHERE EMPDEPT = 'HR' 
ORDER BY EmpSalary DESC 
FETCH FIRST ROW WITH TIES 

P.S:with ties選項帶給你一個機會,讓的情況下,有多個員工相同的最高薪水的多個結果(這樣造成集可以從一個使用rownum,對此會有在生成的設置總是一排不同)。

+1

排序不工作,在執行該查詢第一行是工資最高的時間,但工資6000和部門「人力資源」。查詢仍然給我安裝12c的第一行 –

+0

,並增加僱員之後我想取,也給予同樣的結果@potashin –

+0

@RanjithReddy:我錯了,它不是'fetch' VS'rownum'問題(其實我不知道是什麼問題,只是爲了澄清事情 - 是'EmpSalary'數字?)。你還面臨同樣的問題嗎? – potashin

1
SELECT EmpID,EmpName,MAX(EmpSalary),EmpDept 
FROM Employee 
WHERE EmpDept='HR' 
GROUP BY EmpSalary 
+0

ORA-00979:不是GROUP BY表達式 00979. 00000 - 「不是一個GROUP BY表達式「 *原因: *操作: 錯誤在行:1列:8 –

+0

http://stackoverflow.com/a/1520641/2792083 – Munawir

0

這應該可以做到。

SELECT Max(EmpSalary) 
FROM employees 
WHERE EmpDept = 'HR'; 

您希望從EmpSalary列中獲得最高工資,因爲這是存儲工資的地方。然後你想區分你只對HR感興趣。這些信息存儲在EmpDept中。員工是表格的名稱,你沒有說明你的表格的名稱,在你的案例中可能會有所不同。

+0

我需要整行,以便我可以將它映射到pojo對象然後做豐富。 –

0

試試吧。希望它會給你平靜。

select emp.* 
from employee emp 
inner join (select EmpDept, max(salary) ms from employee group by EmpDept) m 
    on emp.EmpDept = "HR" and emp.salary = m.ms 
0

的方式之一,在Oracle 11g中工作(如你標記你的問題),而不是在其他的答案中提到爲analytical max()功能。 它允許查詢看到其他行值,而不是從當前行丟失細節。對於HR部門是:

select EmpID, EmpName, EmpSalary, EmpDept 
    from (select EmpID, EmpName, EmpSalary, EmpDept, 
       max(EmpSalary) over() as max_sal 
      from employee where empdept = 'HR') 
    where EmpSalary = max_sal 

EMPID EMPNAME EMPSALARY EMPDEPT 
------ ---------- --------- ---------- 
    1 Steve   5000 HR 
顯示在他們的部門最大的工資所有員工

類似的查詢:

select EmpID, EmpName, EmpSalary, EmpDept 
    from (select EmpID, EmpName, EmpSalary, EmpDept, 
       max(EmpSalary) over (partition by EmpDept) as max_sal 
      from employee) 
    where EmpSalary = max_sal 

EMPID EMPNAME EMPSALARY EMPDEPT 
------ ---------- --------- ---------- 
    1 Steve   5000 HR 
    2 Robert   5000 Management