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.