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

Minimum distance og gruppe efter

Her er en fremragende artikel i den officielle MySQL-dokumentation:

Citat:

Rækkerne med gruppemæssigt maksimum af en bestemt kolonne

Opgave:For hver artikel skal du finde den eller de forhandlere, der har den dyreste pris.

Dette problem kan løses med en underforespørgsel som denne:

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

Det foregående eksempel bruger en korreleret underforespørgsel, som kan være ineffektiv (se afsnit 13.2.10.7, "Korrelerede underforespørgsler"). Andre muligheder for at løse problemet er at bruge en ukorreleret underforespørgsel i FROM-sætningen eller en LEFT JOIN.

Ukorreleret underforespørgsel:

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;

VENSTRE 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 fungerer på det grundlag, at når s1.price er på sin maksimale værdi, er der ingen s2.price med en større værdi, og s2 rækkernes værdier vil være NULL.



  1. Fjernelse af vognretur i Mysql DB

  2. Hvordan håndteres samtidige forespørgsler i en MySQL-database?

  3. Data fra to tabeller med samme kolonnenavne

  4. Hvordan får jeg MySQL til at bruge et INDEX til visningsforespørgsel?