Oracle SQL 查询:为员工实现最大的销售

cgp*_*cgp 3 sql oracle plsql

我想找到每个员工的最大销售额(并显示员工的姓名)。在 MySQL 中,这非常简单:

select * 
  from employee, sale 
  where employee.id = sale.employee_id 
  group by employee_id 
  order by sale.total desc
Run Code Online (Sandbox Code Playgroud)

这几乎符合人们的预期,它将返回一个员工列表,并最终返回包含员工行的最大销售记录。

但是,当使用 group by 子句时,Oracle 不允许返回不是 group by 表达式的列。这会让我在 MySQL 中所做的事情在 Oracle 中“不可能”吗?或者有一些解决方法吗?我想我可以执行某种子查询,但不确定是否有另一种方法可以做到这一点,而且构造起来不会那么复杂。

Bra*_*vin 5

删除您的select *列并将其替换为您需要的列,然后按所有“未处理”列进行分组。

你最终会得到类似的结果:

select employee.id, employee.name, max(sale.total)
from employee, sale
where employee.id = sale.employee_id
group by employee.id, employee.name
order by max(sale.total) desc
Run Code Online (Sandbox Code Playgroud)

这很痛苦 - 我以前不得不这样做很多次 - 但只需将所有相关列添加到您的组中即可