Прежде всего, есть временной диапазон в таблице зарплат.Человек мог проработать весь 1991 год за одну зарплату.Это относится, например, к человеку, который работал с 1989 по 2000 год за ту же зарплату.Но человек может также проработать часть года за одну зарплату, а другую часть - за другую (например, повышение зарплаты в июле).И человек, возможно, начал работу 1 декабря 1991 года. Или уволился 15 января 1991 года. Как вы хотите рассчитать среднее значение?
Допустим, вы просто посчитали все записи о зарплатах в 1991 году. Например, человек А работалв январе на 1000 и на остальную часть года на 3000 человек B работал весь год на 1000, а человек C работал только в июне на 2000 и в июле на 4000. Расчет: (1000 + 3000 + 1000 + 3300 + 3700) /5 = 2400. Лица, работавшие в 1991 году с более высокой зарплатой, чем 2400, - это А и С.
select *
from titles
where emp_no in
(
select emp_no
from salaries
where from_date <= date '1991-12-31' and to_date >= date '1991-01-01'
and salary >
(
select avg(salary)
from salaries
where from_date <= date '1991-12-31' and to_date >= date '1991-01-01'
)
);
Возможно, вы также захотите ограничить титулы 1991 годом.Я не знаю.Возможно, вы даже хотите, чтобы они соответствовали промежуткам времени, когда зарплата была выше средней.В этом случае вам придется искать перекрывающиеся временные диапазоны.(Пример 1: повышение зарплаты в июне, новый заголовок в июле будет двумя заголовками для высокой зарплаты. Пример 2: новый заголовок в июне, повышение зарплаты в июле будет одним заголовком с высокой зарплатой.)
Если у вас MySQL 8.0, вы можете использовать предложение WITH
, чтобы выбрать зарплату 1991 года, чтобы сделать запрос более читабельным.