簡體   English   中英

與GROUP BY子句一起使用的MAX函數

[英]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)
  1. 有子句的錯誤答案(單個結果,不是每個部門):

    選擇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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM