我想为Oracle 10g Express做这个练习
“编写SQL查询以检索部门名称,名字, 姓氏,获得最高工资的员工的工资 部“。
我试过这段代码,但它对我不起作用。
有两个名为employees,departments的表
错误是:ORA-00979:不是GROUP BY表达式
SELECT first_name, last_name, departments.department_name, salary
FROM employees, departments
where employees.department_id = departments.department_id
group by salary
输出必须是这样的。
答案 0 :(得分:2)
您将需要使用聚合函数来获取结果。在这种情况下,您将使用max()
来获得每个部门的最高薪水。
有几种方法可以写出来。
您可以在联接中使用子查询:
select d.department_name,
e.first_name,
e.last_name,
e.salary
from employees e
inner join
(
select max(salary) MaxSalary, department_id
from employees
group by department_id
) e1
on e.department_id = e1.department_id
and e.salary = e1.maxsalary
inner join departments d
on e.department_id = d.department_id;
由于您使用的是Oracle,因此可以使用窗口函数来获得结果:
select department_name, first_name, last_name, salary
from
(
select d.department_name,
e.first_name,
e.last_name,
e.salary,
row_number() over(partition by d.department_id order by e.salary desc) rn
from employees e
inner join departments d
on e.department_id = d.department_id
) d
where rn = 1
或者您甚至可以使用WHERE
子句来过滤数据:
select d.department_name,
e.first_name,
e.last_name,
e.salary
from employees e
inner join departments d
on e.department_id = d.department_id
where salary in (select max(salary)
from employees e1
where e.department_id = e1.department_id
group by department_id)
答案 1 :(得分:0)
我理解您提出的问题是参考使用GROUP BY,但我会仔细研究这个问题。
“编写SQL查询以检索获得该部门最高薪水的员工的部门名称,名字,姓氏,工资。”
我认为您也可以从查看Maximum函数中受益,因为您正在寻找具有最高薪水的员工。
您需要一个聚合函数才能使用GROUP BY。聚合函数是在多个记录上执行任务的函数。这些是SUM,AVG和COUNT等函数。如果您有一个聚合函数,则按照函数中没有的任何内容进行分组。
在您的示例中,MAX将是您的聚合函数,您可以成功使用GROUP BY。