AdvancedGROUP BY & Aggregation

Classic: department with highest average salary

The query

SQL
-- Method 1: Subquery
SELECT dept_name
FROM departments
WHERE dept_id = (
  SELECT dept_id
  FROM employees
  GROUP BY dept_id
  ORDER BY AVG(salary) DESC
  LIMIT 1
);

-- Method 2: RANK
SELECT dept_name, avg_salary
FROM (
  SELECT
    d.dept_name,
    ROUND(AVG(e.salary), 2) AS avg_salary,
    RANK() OVER (ORDER BY AVG(e.salary) DESC) AS rnk
  FROM employees e
  JOIN departments d ON e.dept_id = d.dept_id
  GROUP BY d.dept_id, d.dept_name
) t
WHERE rnk = 1;
Tested against PostgreSQL 16

Note

Two approaches for top-N queries. RANK method handles ties (returns multiple depts if equal avg salary).

Tables referenced