如何使用SRF执行SQL查询并仅显示不同的值?
我正在考虑一种使用单行函数进行查询并只显示不同值的方法。 假设我有一个包含employee、store和salary列的employees表,我想使用SRF MAX(salary)来找出每个商店中薪酬最高的员工。如果一家店铺有超过1名员工赚取最高(工资),我如何避免每家店铺显示超过1名最高收入者?请参阅下面的代码。越简单越好。谢谢大家!如何使用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
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。非常好,谢谢。我注意到我发布的子查询中也有错误,