我想为Oracle 10g Express做这个节选
“编写SQL查询以检索部门名称、名称、姓氏、为该部门赚取最高薪资的员工的薪资。”
我试过这段代码,但它对我不起作用。
有两个表,名为员工,部门
错误是: ORA-00979:不是按表达式分组的
SELECT first_name, last_name, departments.department_name, salary
FROM employees, departments
where employees.department_id = departments.department_id
group by salary输出肯定是这样的。

发布于 2013-04-03 01:14:10
您将希望使用聚合函数来获得结果。在这种情况下,您将使用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)发布于 2013-04-03 00:48:28
我明白你所提出的问题是指使用小组的问题,但我会仔细研究这个问题。
“编写SQL查询以检索部门名称、名称、姓氏、为该部门赚取最高薪资的员工的薪资。”
我认为您也将受益于查看最大的功能,因为您正在寻找的雇员与最高工资。
您需要一个聚合函数才能使用GROUP。聚合函数是在多个记录上执行任务的函数。这些是像SUM、AVG和COUNT这样的函数。当您有一个聚合函数时,您可以根据函数中没有的内容进行分组。
在您的示例中,MAX将是您的聚合函数,您可以成功地使用您的组。
https://stackoverflow.com/questions/15776812
复制相似问题