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

如何使用SRF执行SQL查询并仅显示不同的值?,sql,oracle,distinct,Sql,Oracle,Distinct,我正在考虑一种使用单行函数进行查询并只显示不同值的方法。 假设我有一个包含employee、store和salary列的employees表,我想使用SRF MAX(salary)来找出每个商店中薪酬最高的员工。如果一家店铺有超过1名员工赚取最高(工资),我如何避免每家店铺显示超过1名最高收入者?请参阅下面的代码。越简单越好。谢谢大家! SELECT employee, emp1.store, emp1.salary FROM employees emp1 INNER JOIN (SELECT

我正在考虑一种使用单行函数进行查询并只显示不同值的方法。 假设我有一个包含employee、store和salary列的employees表,我想使用SRF MAX(salary)来找出每个商店中薪酬最高的员工。如果一家店铺有超过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

可能有一种更干净的方法可以做到这一点:

    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行。

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

    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行。

假设这是一个oracle数据库?仅供参考,不需要pl/sql。非常好,谢谢。我注意到我发布的子查询中也有错误,假设这是oracle数据库?仅供参考,不需要pl/sql。非常好,谢谢。我注意到我发布的子查询中也有错误,