mysql 找出该部门中工资最高的讲师

lmyy7pcs  于 11个月前  发布在  Mysql
关注(0)|答案(5)|浏览(115)

SQL查询:对于每个部门,查找该部门中教师的最高薪金。
讲师模式:讲师(ID,姓名,部门名称,薪金)标识主键,部门名称外键引用部门。
部门(部门名称,建筑物,预算)
讲师表值:

ID       Iname     dept_name    salary
10101   Srinivasan  Comp. Sci.  65000
12121   Wu          Finance     90000
15151   Mozart      Music       40000
22222   Einstein    Physics     95000
32343   El Said     History     60000
33456   Gold        Physics     87000
45565   Katz        Comp. Sci.  75000
58583   Califieri   History     62000
76543   Singh       Finance     80000
76766   Crick       Biology     72000
83821   Brandt      Comp. Sci.  92000
98345   Kim         Elec. Eng.  80000

字符串
如果我们尝试手动查找最高薪金,

Brandt      Comp. Sci
Wu          Finance
Mozart      Music
Einstein    Physics
Califieri   History
Crick       Biology 
Kim         Elec. Eng.


现在我运行这个查询,

select distinct 
       T.Iname, 
       T.dept_name 
  from instructor as T, 
       instructor as S 
 where T.salary > S.salary 
 group by T.dept_name;


我得到

Kim Elec. Eng.
Brandt  Comp. Sci.
Crick   Biology
Singh   Finance
Gold    Physics
Califieri   History


我得到了不正确的结果,金融和物理和音乐甚至不包括在内。
我找不到我的错误。我想知道我需要在哪里修改?
谢谢

inb24sb2

inb24sb21#

我想下面的SQL会起作用。

select Iname, dept_name from instructor as t1 where t1.salary=(select max(salary) from instructor as t2 where t1.dept_name = t2.dept_name);

字符串

select t1.Iname, t1.dept_name from instructor as t1 left join instructor as t2 on t1.dept_name = t2.dept_name and t1.salary < t2.salary where t2.dept_name is NULL;

ltqd579y

ltqd579y2#

在MySQL 8+上,这个问题很容易使用RANK处理:

WITH cte AS (
    SELECT *, RANK() OVER (PARTITION BY dept_name ORDER BY salary DESC) rnk
    FROM department
)

SELECT Iname, dept_name, salary
FROM cte
WHERE rnk = 1;

字符串
请注意,如果出现平局,上述报告将报告给定部门内共享最高工资的两个或更多讲师。

e0bqpujr

e0bqpujr3#

使用EXISTS

select T.Iname, 
        T.dept_name 
 from instructor as T
 where not exists (select 1
                   from instructor as S
                   where S.dept_name = T.dept_name
                   and T.salary < S.salary);

字符串

iibxawm4

iibxawm44#

另一种方法是在子查询td_1中查找部门的最大工资,然后使用salary和department将其与数据表连接

select td.Iname, td.dept_name, td.salary
  from test_data td
  join (select max(salary) salary, dept_name
          from test_data td 
         where td.dept_name = dept_name
         group by dept_name) td_1
    on td_1.dept_name = td.dept_name
   and td_1.salary = td.salary

字符串

pu82cl6c

pu82cl6c5#

试试这个:

SELECT ID, Iname, dept_name, salary 
    FROM instructors
GROUP BY Iname,dept_name 
ORDER BY salary DESC ;

字符串

相关问题