sql >> Database >  >> RDS >> Mysql

Hoe gebruik je MAX in MySQL?

U kunt alle gegevens van een rij krijgen die ORDER BY combineert en LIMIT 1 . In jouw geval, dit twee keer gebruiken en combineren met 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
  )

Een andere manier is om de maximale leeftijd van mannen en vrouwen te bepalen (met subquery's):

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

Als je meer dan 2 geslachten hebt of als je Male liever niet hardcodeert en Female constanten in de query, dit kan worden herschreven als:

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

De bovenstaande vragen hebben een belangrijk verschil. De 1e geeft je slechts één mannelijke en slechts één vrouwelijke resultaat (maximaal). De 2e en 3e zoekopdracht geeft u meer dan één wanneer er veel (mannen) zijn met dezelfde maximumleeftijd en ook voor vrouwen.

Een index op (gender, age) zal beide vragen helpen.



  1. Vergrendelt MySql automatisch rijen of moet ik een vergrendeling toevoegen in de deelmodus?

  2. Mysql/PDO Integriteitsschending Duplicaat Primair - hoewel er al niets in de tabel staat

  3. 2 manieren om de minuten te halen uit een datetime-waarde in Oracle Database

  4. Reverse engineer SQLAlchemy declaratieve klassendefinitie van bestaande MySQL-database?