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.