sql >> Database teknologi >  >> RDS >> Mysql

Hvordan bruger man MAX i MySQL?

Du kan få alle data fra en række ved at kombinere ORDER BY og LIMIT 1 . I dit tilfælde skal du bruge dette to gange og kombinere med UNION :

  ( SELECT * 
    FROM person 
    WHERE gender = 'Male'
    ORDER BY age DESC
    LIMIT 1
  )
UNION ALL
  ( SELECT * 
    FROM person 
    WHERE gender = 'Female'
    ORDER BY age DESC
    LIMIT 1
  )

En anden måde er at finde den maksimale alder for mænd og kvinder (med underforespørgsler):

SELECT *
FROM person
WHERE ( gender = 'Male'
      AND age =  
          ( SELECT MAX(age) 
            FROM person 
            WHERE gender = 'Male'
          )
      )
   OR ( gender = 'Female'
      AND age =  
          ( SELECT MAX(age) 
            FROM person 
            WHERE gender = 'Female'
          )
      )

Hvis du har mere end 2 køn, eller hvis du foretrækker ikke at hardkode Male og Female konstanter i forespørgslen, kan dette omskrives som:

SELECT p.*
FROM person AS p
  JOIN
      ( SELECT gender
             , MAX(age) AS maxage 
        FROM person 
        GROUP BY gender
      ) AS pg
    ON  pg.gender = p.gender
    AND pg.maxage = p.age

Ovenstående forespørgsler har en væsentlig forskel. Den 1. giver dig kun én mandlig og kun én kvindelig resultat (højst). Den 2. og 3. forespørgsel vil give dig mere end én, når der er mange (mænd) med samme maksimale alder og tilsvarende for kvinder.

Et indeks på (gender, age) vil hjælpe begge forespørgsler.



  1. Indsæt data ved hjælp af multidimensional matrix fra flere felter

  2. SQL Server-netværksgrænseflader:Forbindelsesstrengen er ikke gyldig [87]

  3. Gruppering efter dato, returner række, selvom der ikke blev fundet nogen poster

  4. Hvordan skriver man dvale-skabelonforespørgsel fra sql-forespørgslen?