本周工作中碰到了两个1对多表的关联查询只要查询出相关联的第一条数据的情况,之前没有使用过分析函数,查了下资料了解了一些。
demo1
--员工表(employees)结构
--ID 姓名 工资 部门ID
-- id name salary dept_id
--查询每个部门工资最高的人
select id , name,salary,dept_id from (select id , name,salary,dept_id rank()
over(partition by dept_id order by salary desc) rank from employees) t
where t.rank = 1
demo2
--查询每个人与部门最高工资的差额
select id , name,salary,(max(salary) over(partition by dept_id)
- salary) diff_max_salary,dept_id
from employees
解决方案
select firm_id,firm_name,contact_id,contact_name from
(select a.id firm_id,a.name firm_name,b.id contact_id,b.name contact_name,
rank() over(partition by a.id order by b.id) rank
from firms a left join contacts b on a.id = b.firm_id
where a.phone like :phone or b.phone like :phone) t where t.rank=1