Nie, to nie jest właściwe podejście.
Wydaje mi się, że mówisz o takim zapytaniu:
SELECT product.*, MIN(qty)
FROM product
GROUP BY
type
ORDER BY
qty
To, co tutaj robisz, to używanie MySQL
rozszerzenie, które pozwala wybrać niezagregowane/niezgrupowane kolumny w GROUP BY
zapytanie.
Jest to najczęściej używane w zapytaniach zawierających zarówno JOIN
i GROUP BY
na PRIMARY KEY
, tak:
SELECT order.id, order.customer, SUM(price)
FROM order
JOIN orderline
ON orderline.order_id = order.id
GROUP BY
order.id
Tutaj, order.customer
nie jest ani pogrupowany, ani zagregowany, ale ponieważ grupujesz według order.id
, gwarantowana jest taka sama wartość w każdej grupie.
W twoim przypadku wszystkie wartości qty
mają różne wartości w grupie.
Nie ma gwarancji, z którego rekordu w grupie wyszukiwarka pobierze wartość.
Powinieneś to zrobić:
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
)
Jeśli utworzysz indeks na product (type, qty, id)
, to zapytanie będzie działać szybko.