sql >> Databasteknik >  >> RDS >> Mysql

Minsta distans och grupp efter

Här är en utmärkt artikel i den officiella MySQL-dokumentationen:

Citat:

Raderna som har det gruppmässiga maxvärdet för en viss kolumn

Uppgift:För varje artikel, hitta den eller de återförsäljare som har det dyraste priset.

Det här problemet kan lösas med en underfråga som denna:

SELECT article, dealer, price
FROM   shop s1
WHERE  price=(SELECT MAX(s2.price)
              FROM shop s2
              WHERE s1.article = s2.article);

Det föregående exemplet använder en korrelerad underfråga, som kan vara ineffektiv (se avsnitt 13.2.10.7, "Korrelerade underfrågor"). Andra möjligheter för att lösa problemet är att använda en okorrelerad underfråga i FROM-satsen eller en LEFT JOIN.

Okorrelerad underfråga:

SELECT s1.article, dealer, s1.price
FROM shop s1
JOIN (
  SELECT article, MAX(price) AS price
  FROM shop
  GROUP BY article) AS s2
  ON s1.article = s2.article AND s1.price = s2.price;

LEFT JOIN:

SELECT s1.article, s1.dealer, s1.price
FROM shop s1
LEFT JOIN shop s2 ON s1.article = s2.article AND s1.price < s2.price
WHERE s2.article IS NULL;

LEFT JOIN fungerar utifrån att när s1.price är på sitt maximala värde, finns det inget s2.price med ett högre värde och s2 radernas värden kommer att vara NULL.



  1. Laddar ner MySQL-dump från kommandoraden

  2. Mysql startar inte efter att ha uppgraderat Mac OS X Yosemite (Mac OS 10.10)

  3. Hur får man tillgång till en MySQL-databaswebbtjänst över LAN?

  4. Hur POSITION() fungerar i PostgreSQL