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

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

Клонировать/Скачать
60.统计salary的累计和running_total.md 1.8 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 10.03.2025 00:53 c66e7df

Подсчет накопленной суммы зарплат running_total

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

Необходимо рассчитать накопленную сумму зарплат running_total. Для первых двух сотрудников это будет сумма зарплат этих двух сотрудников, далее — накопленная сумма зарплат всех предыдущих сотрудников. Пример расчета приведен ниже.

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 s2.emp_no, s2.salary, SUM(s1.salary) AS running_total 
FROM (SELECT emp_no, salary FROM salaries WHERE to_date = '9999-01-01') s1 
INNER JOIN (SELECT emp_no, salary FROM salaries WHERE to_date = '9999-01-01') s2 
ON s1.emp_no <= s2.emp_no 
GROUP BY s2.emp_no

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

  1. Выборка текущей зарплаты сотрудника s1
SELECT emp_no, salary FROM salaries WHERE to_date = '9999-01-01'
  1. Соединение данных текущего сотрудника s2 с данными всех сотрудников, чьи номера меньше или равны текущему сотруднику
s1 INNER JOIN (SELECT emp_no, salary FROM salaries WHERE to_date = '9999-01-01') s2 ON s1.emp_no <= s2.emp_no
  1. Группировка по emp_no и вычисление накопленной суммы зарплат
SELECT s2.emp_no, s2.salary, SUM(s1.salary) AS running_total 
FROM s1 
INNER JOIN s2 
ON s1.emp_no <= s2.emp_no 
GROUP BY s2.emp_no

Опубликовать ( 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