Я пытаюсь выяснить, каков средний процент увеличения заработной платы, на который работник может рассчитывать после двух лет работы.
Table workers
+-----------+------------+
| worker_id | hire_date |
+-----------+------------+
| 10001 | 1986-06-26 |
| 10002 | 1996-08-03 |
+-----------+------------+
Table salaries
+-----------+--------+------------+------------+
| worker_id | salary | from_date | to_date |
+-----------+--------+------------+------------+
| 10001 | 60117 | 1986-06-26 | 1987-06-26 |
| 10001 | 62102 | 1987-06-26 | 1988-06-25 |
| 10001 | 66074 | 1988-06-25 | 1989-06-25 |
| 10001 | 66596 | 1989-06-25 | 1990-06-25 |
| 10001 | 66961 | 1990-06-25 | 1991-06-25 |
| 10002 | 65828 | 1996-08-03 | 1997-08-03 |
| 10002 | 65909 | 1997-08-03 | 1998-08-03 |
| 10002 | 67534 | 1998-08-03 | 1999-08-03 |
| 10002 | 69366 | 1999-08-03 | 2000-08-02 |
+-----------+--------+------------+------------+
В настоящее время у меня есть этот запрос, но я не получаю никакого результата. Вы можете помочь мне?
SELECT YEAR(hire_date), YEAR(from_date), MAX(salary)-MIN(salary)
FROM salaries JOIN workers using(worker_id)
WHERE YEAR(hire_date)-YEAR(from_date) = 2;
Сработало ли приведенное ниже решение?
Кстати, YEAR(hire_date)-YEAR(from_date) никогда не будет положительным.
Люди голосуют против и голосуют, чтобы закрыть вопрос, который правильно сформирован, имеет образцы данных и попытку ОП. Я не понимаю. Это не очень приятно.
@GordonLinoff спасибо за вашу помощь, я очень ценю это. Я не совсем понимаю, что делают две последние строчки. Проверяют, проработал ли человек там ровно 2 года?
Да, @DanielMarcus! Спасибо






Вам нужна зарплата в день приема на работу и зарплата через два года после этого.
По сути, вы хотите дважды найти зарплату для каждого рабочего, а затем выполнить некоторые арифметические операции:
select avg(s2.salary - s.salary)
from workers w join
salaries s
on s.worker_id = w.worker_id and s.start_date = w.hire_date join
salaries s2
on s2.worker_id = w.worker_id and
w.start_date + interval 2 year >= s2.start_date and
w.start_date + interval 2 year < s2.to_date;
Если вы хотите процентное увеличение, то это будет больше похоже на:
select avg( (s2.salary / s.salary) - 1)
См .: Почему я должен предоставлять MCVE для того, что мне кажется очень простым SQL-запросом?