Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wird beim Gruppieren einer geordneten Tabelle immer die erste Zeile zurückgegeben? MySQL

Nein, das ist nicht der richtige Ansatz.

Ich glaube, Sie sprechen von einer Abfrage wie dieser:

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

Was Sie hier tun, ist die Verwendung von MySQL -Erweiterung, mit der Sie nicht aggregierte/nicht gruppierte Spalten in einem GROUP BY auswählen können Abfrage.

Dies wird hauptsächlich in Abfragen verwendet, die sowohl einen JOIN enthalten und ein GROUP BY auf einem PRIMARY KEY , etwa so:

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

Hier order.customer ist weder gruppiert noch aggregiert, sondern da Sie nach order.id gruppieren , hat es innerhalb jeder Gruppe garantiert den gleichen Wert.

In Ihrem Fall alle Werte von qty innerhalb der Gruppe unterschiedliche Werte haben.

Es ist nicht garantiert, aus welchem ​​Datensatz innerhalb der Gruppe die Suchmaschine den Wert übernimmt.

Sie sollten dies tun:

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
        )

Wenn Sie einen Index für product (type, qty, id) erstellen , diese Abfrage wird schnell funktionieren.