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.