mirror of
https://github.com/ada-dmitry/DB.mephi_ada.git
synced 2026-09-24 08:00:16 +00:00
reboot rep
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
CREATE OR REPLACE FUNCTION rearrange_salaries() RETURNS VOID AS $$
|
||||
DECLARE
|
||||
salaries RECORD;
|
||||
small NUMERIC[];
|
||||
larg NUMERIC[];
|
||||
const CONSTANT INTEGER = 10;
|
||||
BEGIN
|
||||
FOR salaries IN
|
||||
SELECT id, salary_in_euro
|
||||
FROM bd6_employees
|
||||
ORDER BY salary_in_euro
|
||||
LIMIT const
|
||||
LOOP
|
||||
small = array_append(small, (SELECT salary_in_euro FROM bd6_employees WHERE id = salaries.id));
|
||||
DELETE FROM bd6_employees
|
||||
WHERE id = salaries.id;
|
||||
END LOOP;
|
||||
|
||||
FOR salaries IN
|
||||
SELECT id, salary_in_euro
|
||||
FROM bd6_employees
|
||||
ORDER BY salary_in_euro DESC
|
||||
LIMIT const
|
||||
LOOP
|
||||
larg = array_append(larg, (SELECT id FROM bd6_employees WHERE id = salaries.id));
|
||||
END LOOP;
|
||||
|
||||
FOR i IN 1..const
|
||||
LOOP
|
||||
UPDATE bd6_employees
|
||||
SET salary_in_euro = salary_in_euro + small[i]
|
||||
WHERE id = larg[i];
|
||||
END LOOP;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
SELECT rearrange_salaries();
|
||||
|
||||
|
||||
|
||||
|
||||
CREATE OR REPLACE FUNCTION update_salaries() RETURNS VOID AS $$
|
||||
DECLARE
|
||||
max_salary_employee_id INTEGER;
|
||||
min_salaries numeric[];
|
||||
max_salaries numeric[];
|
||||
i INTEGER;
|
||||
const CONSTANT INTEGER = 10;
|
||||
BEGIN
|
||||
-- Получаем заработные платы последних 10 человек с самой маленькой заработной платой
|
||||
SELECT array_agg(id) FROM bd6_employees
|
||||
ORDER BY salary_in_euro ASC
|
||||
LIMIT const INTO min_salaries;
|
||||
|
||||
-- Получаем заработные платы 10 первых человек с самой большой заработной платой
|
||||
SELECT array_agg(id) FROM bd6_employees
|
||||
ORDER BY salary_in_euro DESC
|
||||
LIMIT const INTO max_salaries;
|
||||
|
||||
-- Добавляем заработные платы
|
||||
FOR i IN 1..const LOOP
|
||||
UPDATE bd6_employees
|
||||
SET salary_in_euro = salary_in_euro + min_salaries[i]
|
||||
WHERE id = max_salaries[i];
|
||||
END LOOP;
|
||||
|
||||
-- Удаляем 10 человек с наименьшей заработной платой
|
||||
DELETE FROM bd6_employees
|
||||
WHERE id IN (SELECT unnest(min_salaries));
|
||||
|
||||
RAISE NOTICE 'Заработные платы обновлены и % человек удалены', const;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
Reference in New Issue
Block a user