Nej, detta är inte rätt tillvägagångssätt.
Jag tror att du talar om en fråga som denna:
SELECT product.*, MIN(qty)
FROM product
GROUP BY
type
ORDER BY
qty
Det du gör här är att använda MySQL
s tillägg som låter dig välja oaggregerade/ogrupperade kolumner i en GROUP BY
fråga.
Detta används mest i frågor som innehåller både en JOIN
och en GROUP BY
på en PRIMARY KEY
, så här:
SELECT order.id, order.customer, SUM(price)
FROM order
JOIN orderline
ON orderline.order_id = order.id
GROUP BY
order.id
Här, order.customer
är varken grupperad eller aggregerad, men eftersom du grupperar på order.id
, den har garanterat samma värde inom varje grupp.
I ditt fall, alla värden på qty
har olika värderingar inom gruppen.
Det är inte garanterat från vilken post inom gruppen motorn kommer att ta värdet.
Du bör göra så här:
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
)
Om du skapar ett index på product (type, qty, id)
, kommer den här frågan att fungera snabbt.