sql >> Databasteknik >  >> RDS >> Mysql

Hur använder man MAX i MySQL?

Du kan få all data för en rad genom att kombinera ORDER BY och LIMIT 1 . I ditt fall, använd detta två gånger och kombinera 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
  )

Ett annat sätt är att hitta den maximala åldern för män och kvinnor (med underfrågor):

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'
          )
      )

Om du har fler än 2 kön eller om du föredrar att inte hårdkoda Male och Female konstanter i frågan, kan detta skrivas om 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

Ovanstående frågor har en huvudsaklig skillnad. Den 1:a ger dig endast ett manligt och endast ett kvinnligt resultat (högst). Den 2:a och 3:e frågan ger dig mer än en när det finns många (män) med samma maxålder och liknande för kvinnor.

Ett index på (gender, age) hjälper båda frågorna.



  1. Postgres:hur rundar man en tidsstämpel uppåt eller nedåt till närmaste minut?

  2. Vilka DBMS tillåter en order by av ett attribut som inte finns i select-satsen?

  3. Genialt SQL Password Changer Utility för att återställa SQL Password

  4. Använda kolumnalias i fältet Sales Order Grid