Ne, toto není správný přístup.
Věřím, že mluvíte o dotazu jako je tento:
SELECT product.*, MIN(qty)
FROM product
GROUP BY
type
ORDER BY
qty
Vy zde používáte MySQL rozšíření 's, které vám umožňuje vybrat neagregované/neseskupené sloupce v GROUP BY dotaz.
To se většinou používá v dotazech obsahujících jak JOIN a GROUP BY na PRIMARY KEY , takto:
SELECT order.id, order.customer, SUM(price)
FROM order
JOIN orderline
ON orderline.order_id = order.id
GROUP BY
order.id
Zde order.customer není seskupený ani agregovaný, ale protože seskupujete na order.id , je zaručeno, že bude mít v každé skupině stejnou hodnotu.
Ve vašem případě všechny hodnoty qty mají v rámci skupiny různé hodnoty.
Není zaručeno, ze kterého záznamu v rámci skupiny motor převezme hodnotu.
Měli byste udělat toto:
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
)
Pokud vytvoříte index pro product (type, qty, id) , bude tento dotaz fungovat rychle.