AdvancedINSERT, UPDATE, DELETE

Batch UPDATE with CTE for complex logic

The query

SQL
WITH
salary_adjustments AS (
  SELECT
    emp_id,
    salary,
    CASE
      WHEN salary < 40000 THEN salary * 1.15  -- 15% for low earners
      WHEN salary BETWEEN 40000 AND 70000 THEN salary * 1.10  -- 10%
      WHEN salary > 70000 THEN salary * 1.05  -- 5% for high earners
    END AS new_salary
  FROM employees
  WHERE status = 'active'
    AND EXTRACT(YEAR FROM hire_date) <= 2022
)
UPDATE employees e
SET salary = sa.new_salary
FROM salary_adjustments sa
WHERE e.emp_id = sa.emp_id
RETURNING e.emp_id, e.first_name, sa.salary AS old_salary, e.salary AS new_salary;
Tested against PostgreSQL 16

Note

CTE in UPDATE statement makes complex conditional bulk updates readable and maintainable.

Tables referenced