我创建了两个表一个“员工”表和“部门”表。
在部门表列名称是:
Dept_ID, Dept_Name
在这里,我分配了主键Dept_ID
在雇员表列名是:
Emp_ID, FName, LName, City, Emp_Salary, Dept_ID
Emp_ID
在这里,我为& 外键分配了主键,以供Dept_ID
参考
Department(Dept_ID)
我想知道获得第二高薪水的部门名称。我需要语法
请帮忙
我创建了两个表一个“员工”表和“部门”表。
在部门表列名称是:
Dept_ID, Dept_Name
在这里,我分配了主键Dept_ID
在雇员表列名是:
Emp_ID, FName, LName, City, Emp_Salary, Dept_ID
Emp_ID
在这里,我为& 外键分配了主键,以供Dept_ID
参考
Department(Dept_ID)
我想知道获得第二高薪水的部门名称。我需要语法
请帮忙
对于 Oracle,这将导致以下查询:
SELECT d.Dept_Name
FROM (
SELECT rownum AS position, a.*
FROM (
SELECT Dept_ID, SUM(Emp_Salary) as Total_Salary
FROM employees
GROUP BY Dept_ID
ORDER BY Total_Salary DESC
) a
) b
INNER JOIN department d ON d.Dept_ID = b.Dept_ID
WHERE b.position = 2
您可以在此处查看一个有效的 Oracle SQLFiddle 示例:http://sqlfiddle.com/#!4/f5602/ 17
为了完整起见,如果您的 DBMS 是 MySQL,则此查询可以解决问题:
SELECT d.Dept_Name
FROM (
SELECT Dept_ID, SUM(Emp_Salary) as Total_Salary
FROM employees
GROUP BY Dept_ID
ORDER BY Total_Salary DESC
LIMIT 1,1
) a
INNER JOIN department d ON d.Dept_ID = a.Dept_ID
你可以在这里看到一个有效的 MySQL SQLFiddle 示例:http://sqlfiddle.com/#!2/738e0/ 15
如果这是 MSSQL,请尝试以下查询:
with salary as --sum all salaries for all departments
(
select d.Dept_ID, SUM(e.Emp_Salary) as SalarySum
from Department d
inner join Employees e on e.Dept_ID = d.Dept_ID
group by d.Dept_ID
),
max as --select maximum salary
(
select MAX(s.SalarySum) as Max
from salary s
)
select top 1 *
from salary s
where s.SalarySum < (select top 1 m.Max from max m) -- only select those that are lower than max
order by s.SalarySum desc