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

順序付けされたテーブルをグループ化すると、常に最初の行が返されますか? MYSQL

    いいえ、これは正しいアプローチではありません。

    あなたはこのような質問について話していると思います:

    SELECT  product.*, MIN(qty)
    FROM    product
    GROUP BY
            type
    ORDER BY
            qty
    

    ここで行っているのは、MySQLを使用していることです。 GROUP BYで集約されていない/グループ化されていない列を選択できるようにするの拡張機能 クエリ。

    これは主に、JOINの両方を含むクエリで使用されます およびGROUP BY PRIMARY KEYで 、このように:

    SELECT  order.id, order.customer, SUM(price)
    FROM    order
    JOIN    orderline
    ON      orderline.order_id = order.id
    GROUP BY
            order.id
    

    ここでは、order.customer グループ化も集約もされていませんが、order.idでグループ化されているためです 、各グループ内で同じ値を持つことが保証されています。

    あなたの場合、qtyのすべての値 グループ内で異なる値を持っています。

    グループ内のどのレコードからエンジンが値を取得するかは保証されません。

    これを行う必要があります:

    SELECT  p.*
    FROM    (
            SELECT  DISTINCT type
            FROM    product p
            ) pd
    JOIN    p
    ON      p.id = 
            (
            SELECT  pi.id
            FROM    product pi
            WHERE   pi.type = pd.type
            ORDER BY
                    type, qty, id
            LIMIT 1
            )
    

    product (type, qty, id)にインデックスを作成する場合 、このクエリは高速に機能します。




    1. 引用符で囲まれたプレースホルダーを使用してクエリを使用するにはどうすればよいですか? (perl / postgresql)

    2. FROMキーワードが予期された場所に見つかりません

    3. コースの先生の名前を取得する方法

    4. Windowsでのmysqlのインポート