sql >> Base de Datos >  >> RDS >> Mysql

¿Agrupar una tabla ordenada siempre devolverá la primera fila? MYSQL

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.