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

Minimální vzdálenost a skupina podle

Zde je vynikající článek v oficiální dokumentaci MySQL:

Citace:

Řádky obsahující skupinové maximum určitého sloupce

Úkol:U každého článku najděte prodejce nebo prodejce s nejdražší cenou.

Tento problém lze vyřešit pomocí poddotazu, jako je tento:

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

Předchozí příklad používá korelovaný poddotaz, který může být neefektivní (viz 13.2.10.7 – „Korelované poddotazy“). Další možností řešení problému je použití nekorelovaného poddotazu v klauzuli FROM nebo LEFT JOIN.

Nekorelovaný dílčí dotaz:

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;

LEVÉ PŘIPOJENÍ:

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 funguje na základě toho, že když je s1.price na své maximální hodnotě, neexistuje žádná s2.price s vyšší hodnotou a hodnoty s2 řádků budou NULL.



  1. Návrh SQL pro průzkum s odpověďmi různých datových typů

  2. Někdo se naboural do mé databáze – jak?

  3. PHP/MYSQL Retrieve Name na základě jiného kritéria

  4. Vytvořte tabulku dvou typů v PostgreSQL