sql >> Database >  >> RDS >> Mysql

Extra velden met SQL MIN() &GROUP BY

Als je de "goedkoopste" werknemer op elke afdeling zou willen krijgen, zou je twee keuzes uit mijn hoofd hebben:

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

Of u kunt gebruiken:

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

De tweede verklaring werkt door te zeggen:laat me alle medewerkers zien waar je geen andere medewerker op dezelfde afdeling kunt vinden met een lager salaris.

In beide gevallen, als twee of meer werknemers gelijke salarissen hebben die het minimum zijn, krijgt u ze allebei (allemaal).



  1. Een Excel-spreadsheet maken vanuit een Oracle-database

  2. Meerdere rijen invoegen in één SQL-query?

  3. Waar databasereferenties veilig op te slaan binnen een PHP-website

  4. Gebruiker heeft geen toegang tot een database