Mysql
 sql >> Base de données >  >> RDS >> Mysql

Champs supplémentaires avec SQL MIN() &GROUP BY

Si vous vouliez obtenir l'employé "le moins cher" dans chaque département, vous auriez deux choix en tête :

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 vous pouvez utiliser :

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 deuxième déclaration fonctionne en disant, montrez-moi tous les employés où vous ne pouvez pas trouver un autre employé dans le même département avec un salaire inférieur.

Dans les deux cas, si deux employés ou plus ont des salaires égaux qui sont le minimum, vous les recevrez tous les deux (tous).