[sql] SQL21 現在の従業員の入社後の昇給を求める

トピック:

現職社員の入社以来の昇給額を求める

次のような従業員テーブルの従業員プロファイルがあります。

emp_no  生年月日  ファーストネーム  苗字  性別 採用日 
10001 1953-09-02 ジョージ      ファセロ     M 2001-06-22
10002 1964-06-02 ベザレル     単純      ふ 1999-08-03

次のような給与テーブルの給与プロファイルがあります。

emp_no  給料 from_date  現在まで
10001 85097 2001-06-22 2002-06-22
10001 88958 2002-06-22 9999-01-01
10002 72527 1999-08-03 2000-08-02
10002 72527 2000-08-02 2001-08-02

現在の従業員が入社してからの給与の増加を求め、現在の従業員番号 emp_no とそれに対応する昇給の伸びを指定し、成長に従って昇順に並べ替えます。上記の例の出力は次のようになります。

(注: to_date は給与調整の終了日、または退職日です。to_date='9999-01-01' の場合は、現在も勤務中であり、その後の調整記録がないことを意味します)

emp_no 成長
10001 3861

答え:

 私のアプローチ:給与テーブルの最大の to_data が 9999-01-01 である emp_no を見つけてから、最低給与と最高給与を見つけ、その差を見つけます。

エラーの理由:勤務期間中に給与が減額される可能性があります, つまり、最低給与は入社日にない可能性があります. タイトルは入社以来の給与を求めています. 違いは to_data が9999-01-01 の給与から、hire_date の給与を引いたもの

正しい方法:従業員テーブルと 2 つの給与テーブルを結合します。同じ emp_no の Hire_date は from_date と同じで、to_date は 9999-01-01 です。

select
    e.emp_no,
    s2.salary - s1.salary as `growth`
from
    employees e
inner join
    salaries s1
on
    e.emp_no = s1.emp_no
    and e.hire_date = s1.from_date
inner join
    salaries s2
on
    e.emp_no = s2.emp_no
    and s2.to_date = '9999-01-01'
order by
    `growth` asc

おすすめ

転載: blog.csdn.net/weixin_43955488/article/details/124570819