Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

O agrupamento de uma tabela ordenada sempre retornará a primeira linha? MYSQL


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.