[SQL23]各プロジェクトで最も経験豊富な(experience_years)従業員にクエリを実行します

各プロジェクトで最も経験豊富な従業員(最大のexperience_years)を見つけます

次の2つのテーブル
プロジェクトがあります

pro_id      emp_id
1           1
1           2
1           3
2           1
2           4

社員

emp_id      name        exp_year
1           Lisi        3
2           Wangwu      2
3           Zhaoliu     3
4           Zhangsan    2

結果は次のとおりです。

pro_id      emp_id      exp_year
1           1           Lisi
1           3           Zhaoliu
2           1           Lisi

解決する:

select pro_id
      ,emp_id
      ,name
  from (
        select a.pro_id
              ,a.emp_id
              ,b.name
              ,b.exp_year
              ,rank() over(partition by a.pro_id order by b.exp_year desc) as rn
          from project a
          left join employee b
            on a.emp_id = b.emp_id
        )a
 where rn = 1
;

pro_id	emp_id	name
1	1	Lisi
1	3	Zhaoliu
2	1	Lisi


卓注:
建表和データcreate table project(pro_id int、emp_id int);
プロジェクト値に挿入(1,1);
プロジェクト値に挿入します(1,2);
プロジェクト値に挿入します(1,3);
プロジェクトvalues(2,1);に挿入します。
プロジェクト値に挿入します(2,4);

テーブルemployee(emp_id int、name varchar(30)、exp_year int);を作成します。
従業員の値に挿入します(1、 'Lisi'、3);
従業員の値に挿入します(2、 'Wangwu'、2);
従業員の値に挿入します(3、 'Zhaoliu'、3);
従業員の値に挿入します(4、 'Zhangsan'、2);

 

おすすめ

転載: blog.csdn.net/debimeng/article/details/104200721