-3

我创建了两个表一个“员工”表和“部门”表。

部门表列名称是:

Dept_ID, Dept_Name 

在这里,我分配了主键Dept_ID

雇员表列名是:

Emp_ID, FName, LName, City, Emp_Salary, Dept_ID

Emp_ID在这里,我为& 外键分配了主键,以供Dept_ID参考 Department(Dept_ID)

我想知道获得第二高薪水的部门名称。我需要语法

请帮忙

4

2 回答 2

1

对于 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

于 2013-06-13T10:25:44.720 回答
0

如果这是 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
于 2013-06-13T10:10:00.980 回答