Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Campos extras com SQL MIN() e GROUP BY


Se você quisesse obter o funcionário "mais barato" de cada departamento, teria duas opções na minha cabeça:
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

Ou você pode 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

A segunda afirmação funciona efetivamente dizendo, mostre-me todos os funcionários onde você não consegue encontrar outro funcionário no mesmo departamento com um salário menor.

Em ambos os casos, se dois ou mais funcionários tiverem salários iguais que são o mínimo, você receberá os dois (todos).