2012-03-07 41 views
1

我是SQL的初學者找到最大價值的物品,有此表指導老師:SQL:如何根據一個屬性

ID  name dept_name salary 
001  A  d01  1000 
002  B  d02  2000 
003  C  d01  3000 
... 

我寫一個代碼,找出誰在每個部門像工資最高的人:

name  dept_name 
C   d01 
B   d02 

我不知道如何找到最大值 ,但我不知道如何根據所有各部門DEPT_NAME使用它。

+0

注意你的表是不是完全正常化。 – onedaywhen 2012-03-07 10:50:32

回答

3

這將確保只有是每個部門中工資最高記錄返回結果集。

SELECT name, dept_name, salary 
FROM tbl t 
WHERE NOT EXISTS(SELECT salary FROM tbl t2 WHERE t2.salary>t.salary AND t2.dept_name=t.dept_name) 

使用SELECT name, MAX(salary)像其他回答者一樣使用不起作用。使用MAX()將返回每個部門的最高工資,但名稱不一定與該工資值相關。

例如,SELECT MIN(salary), MAX(salary)很可能會從不同記錄中提取值。這就是聚合函數的工作原理。

1
select name, max(dept_name) 
from tbl 
group by name 
+0

你爲什麼選擇max(dept_name)? – 2012-03-07 10:09:20

+0

您可以將聚合函數用於任何其他字段 – triclosan 2012-03-07 10:16:21

0

您可以使用group by子句。勾選此w3Schools link

SELECT NAME,DEPT_NAME,max(SALARY) FROM table_name group by DEPT_NAME 
0

我認爲它是不包括在結果的薪水要求:

WITH INSTRUCTOR 
    AS 
    (
     SELECT * 
     FROM (
       VALUES ('001', 'A', 'd01', 1000), 
        ('002', 'B', 'd02', 2000), 
        ('003', 'C', 'd01', 3000) 
      ) AS T (ID, name, dept_name, salary) 
    ), 
    INSTRUCTOR_DEPT_HIGHEST_SALARY 
    AS 
    (
     SELECT dept_name, MAX(salary) AS highest_salary 
     FROM INSTRUCTOR 
     GROUP 
      BY dept_name 
    ) 
SELECT ID, name, dept_name 
    FROM INSTRUCTOR AS T 
WHERE EXISTS (
       SELECT * 
       FROM INSTRUCTOR_DEPT_HIGHEST_SALARY AS H 
       WHERE H.dept_name = T.dept_name 
         AND H.salary = T.highest_salary 
      ); 
相關問題