Mysql
 sql >> Database >  >> RDS >> Mysql

Campi extra con SQL MIN() e GROUP BY

Se volessi ottenere l'impiegato "più economico" in ogni reparto, avresti due scelte in cima alla mia testa:

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

Oppure puoi usare:

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 seconda affermazione funziona dicendo in modo efficace, mostrami tutti i dipendenti in cui non puoi trovare un altro dipendente nello stesso dipartimento con uno stipendio inferiore.

In entrambi i casi, se due o più dipendenti hanno la stessa retribuzione minima, li otterrai entrambi (tutti).