我是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使用它。
我是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使用它。
這將確保只有是每個部門中工資最高記錄返回結果集。
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)
很可能會從不同記錄中提取值。這就是聚合函數的工作原理。
select name, max(dept_name)
from tbl
group by name
你爲什麼選擇max(dept_name)? – 2012-03-07 10:09:20
您可以將聚合函數用於任何其他字段 – triclosan 2012-03-07 10:16:21
您可以使用group by子句。勾選此w3Schools link
SELECT NAME,DEPT_NAME,max(SALARY) FROM table_name group by DEPT_NAME
我認爲它是不包括在結果的薪水要求:
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
);
注意你的表是不是完全正常化。 – onedaywhen 2012-03-07 10:50:32