sql >> Databáze >  >> RDS >> Mysql

Jak používat MAX v MySQL?

Všechna data řádku můžete získat kombinací ORDER BY a LIMIT 1 . Ve vašem případě to použijte dvakrát a zkombinujte s 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
  )

Dalším způsobem je zjistit maximální věk mužů a žen (pomocí dílčích dotazů):

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

Pokud máte více než 2 pohlaví nebo pokud nechcete napevno kódovat Male a Female konstanty v dotazu, to lze přepsat jako:

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

Výše uvedené dotazy mají zásadní rozdíl. 1. vám dá pouze jeden mužský a pouze jeden ženský výsledek (maximálně). 2. a 3. dotaz vám poskytne více než jeden, pokud existuje mnoho (mužů) se stejným maximálním věkem a podobně pro ženy.

Index na (gender, age) pomůže buď dotaz.



  1. Nelze připojit PostgreSQL ke vzdálené databázi pomocí pgAdmin

  2. Chyba MySQL při vytváření cizího klíče pomocí migrace Laravel

  3. Může mi `mysqlcheck` pomoci vyřešit problémy s databází bez poškození databáze?

  4. mySQL vybírá PSČ do x km/míle v rozsahu y