[英]MAX function used with GROUP BY clause
我有名稱,薪水和員工部門的數據庫。 我需要一個查詢以獲取每個部門中薪水最高的員工。
數據庫:
create table test(
employee_name VARCHAR(255),
department VARCHAR(255),
salary INT
);
數據:
INSERT INTO test(employee_name, department, salary) VALUES
("John", "DepartmentA", 1500),
("Sarah","DepartmentA", 1600),
("Romel","DepartmentA", 1400),
("Victoria","DepartmentB", 1400),
("Maria", "DepartmentB", 1600);
我的嘗試:
1.1最高薪水=部門工資
SELECT employee_name, salary FROM test WHERE MAX(salary) = salary GROUP BY department;
ERROR 1111 (HY000): Invalid use of group function
1.2。 當我用硬編碼值替換MAX(salary)時,它按預期工作:
SELECT employee_name, salary FROM test WHERE 1600 = salary GROUP BY department;
+---------------+--------+
| employee_name | salary |
+---------------+--------+
| Sarah | 1600 |
| Maria | 1600 |
+---------------+--------+
2 rows in set (0.00 sec)
有子句的錯誤答案(單個結果,不是每個部門):
選擇employee_name,薪水來自部門的測試GROUP BY HAVING MAX(薪水)=薪水;
+ --------------- + -------- + | 員工名| 薪水| + --------------- + -------- + | 瑪麗亞| 1600 | + --------------- + -------- +設置1行(0.00秒)
我期望的結果是:
Sarah, DepartmentA
Maria, DepartmentB
首先,您必須獲得每個部門的最高薪水:
SELECT department, max(salary) as max_salary
FROM test
GROUP BY department
然后您可以將此子查詢重新連接到測試表:
SELECT t.*
FROM
test t INNER JOIN (
SELECT department, max(salary) as max_salary
FROM test
GROUP BY department
) d ON t.department=d.department AND t.salary=d.max_salary
您可以將相關子查詢編寫為:
select employee_name,
department,
salary
from test T1 where T1.salary = (select max(T2.salary)
from test T2
where T1.department = T2.department
group by T2.department
)
...但是請注意,它會比不相關的同類慢得多
嘗試這個:
SELECT t1.employee_name, t1.department
FROM test t1
INNER JOIN (SELECT t2.department, MAX(t2.salary) AS salary
FROM test t2
GROUP BY t2.department
) AS t2 ON t1.department = t2.department AND t1.salary = t2.salary;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.