トピック:
次のような従業員テーブルの従業員プロファイルがあります。
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