Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Zusätzliche Felder mit SQL MIN() &GROUP BY

Wenn Sie in jeder Abteilung den "billigsten" Mitarbeiter bekommen wollten, hätten Sie zwei Möglichkeiten:

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

Oder Sie können verwenden:

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

Die zweite Aussage funktioniert so, dass sie effektiv sagt, zeigen Sie mir alle Mitarbeiter, wo Sie keinen anderen Mitarbeiter in derselben Abteilung mit einem niedrigeren Gehalt finden können.

In beiden Fällen erhalten Sie beide (alle), wenn zwei oder mehr Mitarbeiter gleiche Gehälter haben, die das Minimum sind.