与联接相关的SQL查询

与联接相关的SQL查询,sql,join,Sql,Join,有三张桌子- 我必须找出每个部门的最高工资。 输出中需要以下列- 注- emp_id是主键。 在输出中,emp_sal应该是部门的最高工资。尝试以下查询: select max(emp_salary), emp_dept from department d join salary s on d.emp_id = s.emp_id group by emp_dept 我已将示例数据与下面的查询放在一起。我已经在SQLServer中测试过了 create table #dept(emp_i

有三张桌子-

我必须找出每个部门的最高工资。 输出中需要以下列-

注- emp_id是主键。 在输出中,emp_sal应该是部门的最高工资。

尝试以下查询:

   select max(emp_salary), emp_dept  from department d join salary s on d.emp_id = s.emp_id group by emp_dept

我已将示例数据与下面的查询放在一起。我已经在SQLServer中测试过了

create table #dept(emp_id int, emp_dept varchar(30))
create table #emp(emp_id int, emp_name varchar(30))
create table #salary(emp_id int, salary int)

insert into #dept values(1,'HR'), (2,'HR'), (3,'Finance')
insert into #emp values (1, 'Venkat'), (2,'raman'), (3, 'Murugan')
insert into #salary values(1, 5000), (2, 10000), (3, 20000)

select emp_dept, emp_id, emp_name
from
(
select d.emp_dept,d.emp_id, e.emp_name, Row_Number() over (partition by d.emp_dept order by s.salary desc) as rnk
from #Dept AS d
LEFT JOIN #Salary AS s
ON d.emp_id = s.emp_id
LEFT JOIN #emp AS e
ON d.emp_id = e.emp_id
) as t
where rnk = 1

始终尝试先使用简单查询获取一些数据,然后根据您需要从该查询中获取数据,使其逐个进行筛选,这样您就有了一个清晰的想法。也可以尝试下面的查询

SELECT emp_id, emp_name, emp_dept, max(emp_sal) from (SELECT emp_id, emp_name, emp_dept, emp_sal from salary inner join department on salary.emp_id = department.emp_id inner join employee on salary.emp_id = employee.emp_id ) group by emp_dept
另请参见此链接。

请向我们展示您的尝试。尚未使用员工表。我还需要输出中的emp_id和emp_名称。
create table #dept(emp_id int, emp_dept varchar(30))
create table #emp(emp_id int, emp_name varchar(30))
create table #salary(emp_id int, salary int)

insert into #dept values(1,'HR'), (2,'HR'), (3,'Finance')
insert into #emp values (1, 'Venkat'), (2,'raman'), (3, 'Murugan')
insert into #salary values(1, 5000), (2, 10000), (3, 20000)

select emp_dept, emp_id, emp_name
from
(
select d.emp_dept,d.emp_id, e.emp_name, Row_Number() over (partition by d.emp_dept order by s.salary desc) as rnk
from #Dept AS d
LEFT JOIN #Salary AS s
ON d.emp_id = s.emp_id
LEFT JOIN #emp AS e
ON d.emp_id = e.emp_id
) as t
where rnk = 1
SELECT emp_id, emp_name, emp_dept, max(emp_sal) from (SELECT emp_id, emp_name, emp_dept, emp_sal from salary inner join department on salary.emp_id = department.emp_id inner join employee on salary.emp_id = employee.emp_id ) group by emp_dept