Не, това не е правилният подход.
Вярвам, че говорите за заявка като тази:
SELECT product.*, MIN(qty)
FROM product
GROUP BY
type
ORDER BY
qty
Това, което правите тук, е да използвате MySQL
разширение на , което ви позволява да избирате неагрегирани/негрупирани колони в GROUP BY
заявка.
Това се използва най-вече в заявките, съдържащи както JOIN
и GROUP BY
на PRIMARY KEY
, като това:
SELECT order.id, order.customer, SUM(price)
FROM order
JOIN orderline
ON orderline.order_id = order.id
GROUP BY
order.id
Тук, order.customer
не е нито групиран, нито агрегиран, но тъй като вие групирате на order.id
, гарантира се, че има една и съща стойност във всяка група.
Във вашия случай всички стойности на qty
имат различни стойности в групата.
Не е гарантирано от кой запис в групата машината ще вземе стойността.
Трябва да направите следното:
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
)
Ако създадете индекс на product (type, qty, id)
, тази заявка ще работи бързо.