Mysql: вычислить% увеличения / уменьшения при совпадении определенной разницы в датах

Я пытаюсь выяснить, каков средний процент увеличения заработной платы, на который работник может рассчитывать после двух лет работы.

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;

Сработало ли приведенное ниже решение?

Daniel Marcus 23.04.2018 17:16

Кстати, YEAR(hire_date)-YEAR(from_date) никогда не будет положительным.

dnoeth 23.04.2018 17:17

Люди голосуют против и голосуют, чтобы закрыть вопрос, который правильно сформирован, имеет образцы данных и попытку ОП. Я не понимаю. Это не очень приятно.

Gordon Linoff 23.04.2018 17:20

@GordonLinoff спасибо за вашу помощь, я очень ценю это. Я не совсем понимаю, что делают две последние строчки. Проверяют, проработал ли человек там ровно 2 года?

user9609362 23.04.2018 17:42

Да, @DanielMarcus! Спасибо

user9609362 23.04.2018 17:48
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
6
38
1

Ответы 1

Вам нужна зарплата в день приема на работу и зарплата через два года после этого.

По сути, вы хотите дважды найти зарплату для каждого рабочего, а затем выполнить некоторые арифметические операции:

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)

Другие вопросы по теме