sql >> Databasteknik >  >> RDS >> Mysql

Extra fält med SQL MIN() &GROUP BY

Om du ville få den "billigaste" medarbetaren på varje avdelning skulle du ha två val:

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

Eller så kan du använda:

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

Det andra påståendet fungerar genom att effektivt säga, visa mig alla anställda där du inte kan hitta en annan anställd på samma avdelning med lägre lön.

I båda fallen, om två eller flera anställda har lika löner som är det lägsta, får du dem båda (alla).



  1. Hur visar jag flera staplade kolumner för varje datumintervall i en staplad stapel

  2. SMALLDATETIMEFROMPARTS() Exempel i SQL Server (T-SQL)

  3. Ändra en kolumntyp till längre strängar i skenor

  4. Rekommenderade Intel-processorer för SQL Server 2014 – mars 2015