Nee, dit is niet de juiste aanpak.
Ik geloof dat je het over een vraag als deze hebt:
SELECT product.*, MIN(qty)
FROM product
GROUP BY
type
ORDER BY
qty
Wat je hier doet, is MySQL
's extensie waarmee u niet-geaggregeerde/niet-gegroepeerde kolommen kunt selecteren in een GROUP BY
vraag.
Dit wordt meestal gebruikt in de zoekopdrachten die zowel een JOIN
. bevatten en een GROUP BY
op een PRIMARY KEY
, zoals dit:
SELECT order.id, order.customer, SUM(price)
FROM order
JOIN orderline
ON orderline.order_id = order.id
GROUP BY
order.id
Hier, order.customer
is niet gegroepeerd of geaggregeerd, maar aangezien u groepeert op order.id
, het heeft gegarandeerd dezelfde waarde binnen elke groep.
In uw geval zijn alle waarden van qty
hebben verschillende waarden binnen de groep.
Het is niet gegarandeerd uit welk record binnen de groep de engine de waarde zal halen.
Je zou dit moeten doen:
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
)
Als u een index maakt op product (type, qty, id)
, deze zoekopdracht werkt snel.