sql >> Databáze >  >> RDS >> Mysql

Další pole s SQL MIN() &GROUP BY

Pokud byste chtěli získat „nejlevnějšího“ zaměstnance v každém oddělení, měli byste z hlavy dvě možnosti:

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

Nebo můžete použít:

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

Druhý příkaz funguje tak, že efektivně říká:Ukažte mi všechny zaměstnance, kde nemůžete najít jiného zaměstnance ve stejném oddělení s nižším platem.

V obou případech, pokud mají dva nebo více zaměstnanců stejné platy, které jsou minimální, dostanete je oba (všichni).



  1. Oznámení ClusterControl 1.7.3:Vylepšená podpora PostgreSQL a nové možnosti nasazení cloudu

  2. Co je opakem GROUP_CONCAT v MySQL?

  3. Pivot na Oracle 10g

  4. Přesuňte databázi MySQL na nový server