1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/xuthus5-Database-SQL-Actual-Combat

Клонировать/Скачать
54.查找排除当前最大最小salary之后的员工的平均工资avg_salary.md 2 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 10.03.2025 00:53 c66e7df

Найти среднюю зарплату сотрудников, исключив максимальную и минимальную зарплаты

Описание задачи

Найдите среднюю зарплату сотрудников, исключив максимальную и минимальную зарплаты.

CREATE TABLE `salaries` (
  `emp_no` int(11) NOT NULL,
  `salary` int(11) NOT NULL,
  `from_date` date NOT NULL,
  `to_date` date NOT NULL,
  PRIMARY KEY (`emp_no`, `from_date`)
);

Ответ

SELECT AVG(salary) AS avg_salary FROM salaries s WHERE to_date = '9999-01-01' AND salary NOT IN (SELECT MIN(salary) FROM salaries WHERE s.to_date = '9999-01-01') AND salary NOT IN (SELECT MAX(salary) FROM salaries WHERE s.to_date = '9999-01-01')

Объяснение решения

Используйте функции MAX и MIN для получения максимальной и минимальной зарплат, а затем используйте NOT IN для исключения этих значений при вычислении средней зарплаты.

  1. Получите записи с максимальной и минимальной зарплатой (логически требуется отфильтровать данные по текущей дате).
SELECT MAX(salary) FROM salaries WHERE s.to_date = '9999-01-01';
SELECT MIN(salary) FROM salaries WHERE s.to_date = '9999-01-01';
  1. Исключите записи с максимальной и минимальной зарплатой.
SELECT * FROM salaries WHERE to_date = '9999-01-01' AND salary NOT IN (SELECT MAX(salary) FROM salaries WHERE s.to_date = '9999-01-01') AND salary NOT IN (SELECT MIN(salary) FROM salaries WHERE s.to_date = '9999-01-01');
  1. Вычислите среднее значение для полученного набора данных.
SELECT AVG(salary) FROM t1;

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/xuthus5-Database-SQL-Actual-Combat.git
git@api.gitlife.ru:oschina-mirror/xuthus5-Database-SQL-Actual-Combat.git
oschina-mirror
xuthus5-Database-SQL-Actual-Combat
xuthus5-Database-SQL-Actual-Combat
master