sql >> データベース >  >> RDS >> Mysql

最小距離とグループ化

    ここ MySQLの公式ドキュメントの優れた記事です:

    引用:

    特定の列のグループごとの最大値を保持する行

    タスク:記事ごとに、最も高い価格のディーラーを見つけます。

    この問題は、次のようなサブクエリで解決できます。

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

    前の例では、相関サブクエリを使用していますが、これは非効率的である可能性があります(セクション13.2.10.7「相関サブクエリ」を参照)。問題を解決するための他の可能性は、FROM句またはLEFTJOINで無相関のサブクエリを使用することです。

    無相関サブクエリ:

    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;
    

    左参加:

    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は、s1.priceが最大値の場合、それより大きい値のs2.priceはなく、s2行の値はNULLになることに基づいて機能します。



    1. MariaDBでのTO_BASE64()のしくみ

    2. 193:%1は、新しいRailsアプリケーションでの有効なWin32アプリケーションのバグではありません

    3. Laravelのjson列の場所をクエリするにはどうすればよいですか?

    4. テーブル名の適切な挿入