我的员工有多位经理。经理姓名字段有(名字,姓氏),电子邮件字段有(last.first@email.com)。没有经理姓名。 因此,当我尝试按员工ID对此进行分组以获取管理员姓名和电子邮件的最大值时,有时我最终会得到错误的名称/电子邮件ID组合。
例如:
person Mgr_name Mgr_email
------- --------- ----------
111 brad,pitt pitt.brad@test.com
111 mike,clark clark.mike@test.com
当我按人分组并获得最大值(mgr_name),mgr_email,我得
person max(Mgr_name) max(Mgr_email)
------- --------- ----------
111 mike,clark pitt.brad@test.com
如何获得正确的电子邮件/名称组合?
答案 0 :(得分:1)
改为使用row_number分析函数:
with t(person ,Mgr_name , Mgr_email) as (
select 111 ,'brad,pitt' , 'pitt.brad@test.com' from dual union all
select 111 ,'mike,clark' , 'clark.mike@test.com' from dual )
select person ,Mgr_name , Mgr_email from (
select t1.*, row_number() over (order by mgr_name) num from t t1)
where num = 1
使用正确的电子邮件获取max mgr_name。
输出:
PERSON MGR_NAME MGR_EMAIL
---------- ---------- -------------------
111 brad,pitt pitt.brad@test.com
答案 1 :(得分:1)
您可以使用子选择来获取表格中每个人的最大mgr_name,然后将其连接回基础结果,以限制仅显示每个人“最大”经理......
SELECT t1.Person, t1.Mgr_name, t1.mgr_email
FROM tableName t1
INNER JOIN (Select max(mgr_name) mname, Person from TableName group by person) t2
on t1.mgr_name = t2.mname
and t2.Person = T1.Person