首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle PL/SQL按问题分组

Oracle PL/SQL按问题分组
EN

Stack Overflow用户
提问于 2013-04-03 00:19:12
回答 2查看 2.6K关注 0票数 1

我想为Oracle 10g Express做这个节选

“编写SQL查询以检索部门名称、名称、姓氏、为该部门赚取最高薪资的员工的薪资。”

我试过这段代码,但它对我不起作用。

有两个表,名为员工,部门

错误是: ORA-00979:不是按表达式分组的

代码语言:javascript
复制
SELECT first_name, last_name, departments.department_name, salary
FROM employees, departments

where employees.department_id = departments.department_id

group by salary

输出肯定是这样的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-03 01:14:10

您将希望使用聚合函数来获得结果。在这种情况下,您将使用max()为每个部门获得最高的薪资。

有几种方法可以写出来。

您可以在联接中使用子查询:

代码语言:javascript
复制
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,所以可以使用窗口函数来获得结果:

代码语言:javascript
复制
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子句来筛选数据:

代码语言:javascript
复制
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)
票数 2
EN

Stack Overflow用户

发布于 2013-04-03 00:48:28

我明白你所提出的问题是指使用小组的问题,但我会仔细研究这个问题。

“编写SQL查询以检索部门名称、名称、姓氏、为该部门赚取最高薪资的员工的薪资。”

我认为您也将受益于查看最大的功能,因为您正在寻找的雇员与最高工资。

您需要一个聚合函数才能使用GROUP。聚合函数是在多个记录上执行任务的函数。这些是像SUM、AVG和COUNT这样的函数。当您有一个聚合函数时,您可以根据函数中没有的内容进行分组。

在您的示例中,MAX将是您的聚合函数,您可以成功地使用您的组。

下面是聚合函数的链接

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15776812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档