sql >> Base de Datos >  >> RDS >> Mysql

Campos adicionales con SQL MIN() y GROUP BY

Si quisiera obtener al empleado "más barato" en cada departamento, tendría dos opciones en la parte superior de mi cabeza:

SELECT
     E.*     -- Don't actually use *, list out all of your columns
FROM
     Employees E
INNER JOIN
     (
          SELECT
               department,
               MIN(salary) AS min_salary
          FROM
               Employees
          GROUP BY
               department
     ) AS SQ ON
     SQ.department = E.department AND
     SQ.min_salary = E.salary

O puedes usar:

SELECT
     E.*
FROM
     Employees E1
LEFT OUTER JOIN Employees E2 ON
     E2.department = E1.department AND
     E2.salary < E1.salary
WHERE
     E2.employee_id IS NULL -- You can use any NOT NULL column here

La segunda declaración funciona diciendo de manera efectiva, muéstrame a todos los empleados donde no puedes encontrar a otro empleado en el mismo departamento con un salario más bajo.

En ambos casos, si dos o más empleados tienen salarios iguales que son los mínimos, obtendrá los dos (todos).