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

Il raggruppamento di una tabella ordinata restituirà sempre la prima riga? MySQL

No, questo non è l'approccio corretto.

Credo che tu stia parlando di una query come questa:

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

Quello che stai facendo qui è usare MySQL ' estensione che ti consente di selezionare colonne non aggregate/non raggruppate in un GROUP BY interrogazione.

Questo è usato principalmente nelle query contenenti sia un JOIN e un GROUP BY su una PRIMARY KEY , in questo modo:

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

Qui, order.customer non è né raggruppato né aggregato, ma poiché stai raggruppando su order.id , è garantito che abbia lo stesso valore all'interno di ogni gruppo.

Nel tuo caso, tutti i valori di qty hanno valori diversi all'interno del gruppo.

Non è garantito da quale record all'interno del gruppo il motore prenderà il valore.

Dovresti fare questo:

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
        )

Se crei un indice su product (type, qty, id) , questa query funzionerà velocemente.