DO $$ /* Объявление переменной для хранения минимальной зарплаты */ DECLARE min_salary INT := 50000; BEGIN -- Выбираем сотрудников с зарплатой выше минимальной PERFORM SELECT e.employee_id, -- ID сотрудника e.first_name || ' ' || e.last_name AS full_name, -- Полное имя (в PostgreSQL используется || для конкатенации) e.salary, -- Зарплата сотрудника UPPER(d.department_name) AS department_name, -- Название отдела в верхнем регистре LENGTH(e.email) AS email_length, -- Длина email /* Булево значение: проверка, работает ли сотрудник в IT */ CASE WHEN d.department_name LIKE 'IT%' THEN TRUE -- LIKE для проверки на принадлежность отделу IT (начинается с IT) ELSE FALSE -- false END AS is_it_department, -- Проверка на отдел IT /* CASE для определения, больше ли зарплата среднего значения по отделу */ CASE WHEN e.salary > (SELECT AVG(e2.salary) FROM employees e2 WHERE e2.department_id = e.department_id) THEN 'Above average' -- Если зарплата больше средней по отделу ELSE 'Below average' -- Если зарплата меньше или равна средней END AS salary_comparison, -- Сравнение зарплаты с средней по отделу /* Проверка, входит ли сотрудник в конкретные отделы */ CASE WHEN e.department_id IN (1, 2, 3) THEN 'Key Departments' -- Если отдел входит в указанный список ELSE 'Other Departments' -- Иначе это другой отдел END AS department_type, /* Проверка зарплаты через BETWEEN */ CASE WHEN e.salary BETWEEN 60000 AND 100000 THEN 'Mid Range Salary' -- Если зарплата в диапазоне ELSE 'Other Salary Range' -- Иначе другой диапазон END AS salary_range FROM employees e JOIN departments d ON e.department_id = d.department_id WHERE e.salary IS NOT NULL -- Проверяем, что зарплата не NULL AND e.salary > min_salary -- Фильтрация по минимальной зарплате ORDER BY e.salary DESC; -- Сортировка по убыванию зарплаты END $$;