如何使用SRF执行SQL查询并仅显示不同的值?

问题描述 投票:0回答:1

我正在尝试一种使用单行函数进行查询并仅显示不同值的方法。假设我有一个雇员表,雇员,商店和薪水列,我想使用SRF MAX(薪水)找出每个商店中薪水最高的雇员。如果在一家商店中有超过1名员工获得最高薪水(薪水),如何避免在每家商店中显示超过1名最高收入者?请参见下面的代码。越简单越好。谢谢!

SELECT employee, emp1.store, emp1.salary
FROM employees emp1
INNER JOIN (SELECT store, salary, MAX(salary) FROM employees GROUP BY store) emp2
ON emp1.store = emp2.store
AND emp1.salary = emp2.salary
sql oracle distinct
1个回答
0
投票

可能有一种更清洁的方法:

    select * from 
    (
       SELECT employee, emp1.store, emp1.salary,
       ROW_NUMBER( ) 
       OVER ( partition by emp1.store order by emp1.salary desc ) rn
       FROM employees emp1
       INNER JOIN (SELECT store,  salary, MAX(salary) FROM employees GROUP BY store, salary) emp2
    ON emp1.store = emp2.store
    AND emp1.salary = emp2.salary
)
where rn = 1

Row_number()分析函数将分配一个值1,2,3,...,按存储分组。那么您总是只为每个分组选择第1行。

© www.soinside.com 2019 - 2024. All rights reserved.