Nej, det er ikke den rigtige tilgang.
Jeg tror, du taler om en forespørgsel som denne:
SELECT product.*, MIN(qty)
FROM product
GROUP BY
type
ORDER BY
qty
Det du gør her er at bruge MySQL
's udvidelse, der giver dig mulighed for at vælge uaggregerede/ugrupperede kolonner i en GROUP BY
forespørgsel.
Dette bruges mest i forespørgsler, der indeholder både en JOIN
og en GROUP BY
på en PRIMARY KEY
, sådan her:
SELECT order.id, order.customer, SUM(price)
FROM order
JOIN orderline
ON orderline.order_id = order.id
GROUP BY
order.id
Her order.customer
er hverken grupperet eller aggregeret, men da du grupperer på order.id
, har den med garanti den samme værdi inden for hver gruppe.
I dit tilfælde er alle værdier af qty
har forskellige værdier inden for gruppen.
Det er ikke garanteret, fra hvilken post i gruppen motoren vil tage værdien.
Du skal gøre dette:
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
)
Hvis du opretter et indeks på product (type, qty, id)
, vil denne forespørgsel fungere hurtigt.