No, este no es el enfoque correcto.
Creo que estás hablando de una consulta como esta:
SELECT product.*, MIN(qty)
FROM product
GROUP BY
type
ORDER BY
qty
Lo que estás haciendo aquí es usar MySQL
La extensión de que le permite seleccionar columnas no agregadas/desagrupadas en un GROUP BY
consulta.
Esto se usa principalmente en las consultas que contienen tanto JOIN
y un GROUP BY
en una PRIMARY KEY
, así:
SELECT order.id, order.customer, SUM(price)
FROM order
JOIN orderline
ON orderline.order_id = order.id
GROUP BY
order.id
Aquí, order.customer
no está agrupado ni agregado, pero dado que está agrupando en order.id
, se garantiza que tendrá el mismo valor dentro de cada grupo.
En su caso, todos los valores de qty
tienen diferentes valores dentro del grupo.
No se garantiza de qué registro dentro del grupo el motor tomará el valor.
Deberías hacer esto:
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
)
Si crea un índice en product (type, qty, id)
, esta consulta funcionará rápido.