Repaso
English

¿Cómo obtienes al empleado mejor pagado por departamento en una consulta?

Opciones

  1. GROUP BY dept y usar MAX(name) para elegir al mejor
  2. ROW_NUMBER() OVER (PARTITION BY dept ORDER BY salary DESC), y quedarse con el 1 (Opción correcta)
  3. ORDER BY dept, salary DESC y añadir LIMIT 1 a la consulta
  4. SELECT DISTINCT dept y añadir el salario más alto al resultado

Respuesta

ROW_NUMBER() OVER (PARTITION BY dept ORDER BY salary DESC) y quedarse con rn = 1

Por qué

Una window function calcula un valor para cada fila mirando un grupo de filas relacionadas (la 'ventana'), sin fusionar filas como hace GROUP BY.

PARTITION BY dept reinicia la numeración en cada departamento; ORDER BY salary DESC pone primero el más alto, así que la fila número 1 es quien más gana.

Usa RANK() si los empates deben devolverse todos.

SELECT * FROM (
  SELECT name, dept, salary,
         ROW_NUMBER() OVER (PARTITION BY dept ORDER BY salary DESC) AS rn
  FROM employees
) t
WHERE rn = 1;

Recuerda

Top N por grupo → ROW_NUMBER() OVER (PARTITION BY ...).

Términos clave

Practica esta pregunta en Repaso