Não, esta não é a abordagem correta.
Acredito que você esteja falando de uma consulta como esta:
SELECT product.*, MIN(qty)
FROM product
GROUP BY
type
ORDER BY
qty
O que você está fazendo aqui é usar
MySQL
's que permite selecionar colunas não agregadas/desagrupadas em um GROUP BY
consulta. Isso é usado principalmente nas consultas que contêm um
JOIN
e um GROUP BY
em uma PRIMARY KEY
, assim:SELECT order.id, order.customer, SUM(price)
FROM order
JOIN orderline
ON orderline.order_id = order.id
GROUP BY
order.id
Aqui,
order.customer
não é agrupado nem agregado, mas como você está agrupando em order.id
, é garantido que tenha o mesmo valor dentro de cada grupo. No seu caso, todos os valores de
qty
têm valores diferentes dentro do grupo. Não é garantido de qual registro dentro do grupo o mecanismo obterá o valor.
Você deve fazer isso:
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
)
Se você criar um índice em
product (type, qty, id)
, essa consulta funcionará rapidamente.