-- 步骤1:使用子查询为每个部门的员工按薪资排名
SELECT 
    department,          -- 部门名称
    employee_name,       -- 员工姓名
    salary               -- 员工薪资
FROM (
    -- 内部子查询:使用窗口函数计算每个部门内的薪资排名
    SELECT 
        department, 
        employee_name, 
        salary,
        -- RANK()函数:为每个部门的员工按薪资降序排名
        -- PARTITION BY department:按部门分组计算排名
        -- ORDER BY salary DESC:按薪资从高到低排序
        RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS rk
    FROM employees
) t  -- 子查询别名t
-- 步骤2:筛选每个部门排名前2的员工
WHERE rk <= 2
-- 步骤3:最终结果按部门升序、薪资降序排列
ORDER BY department, salary DESC;