sql >> Database >  >> RDS >> Mysql

Zal het groeperen van een geordende tafel altijd de eerste rij retourneren? MYSQL

Nee, dit is niet de juiste aanpak.

Ik geloof dat je het over een vraag als deze hebt:

SELECT  product.*, MIN(qty)
FROM    product
GROUP BY
        type
ORDER BY
        qty

Wat je hier doet, is MySQL 's extensie waarmee u niet-geaggregeerde/niet-gegroepeerde kolommen kunt selecteren in een GROUP BY vraag.

Dit wordt meestal gebruikt in de zoekopdrachten die zowel een JOIN . bevatten en een GROUP BY op een PRIMARY KEY , zoals dit:

SELECT  order.id, order.customer, SUM(price)
FROM    order
JOIN    orderline
ON      orderline.order_id = order.id
GROUP BY
        order.id

Hier, order.customer is niet gegroepeerd of geaggregeerd, maar aangezien u groepeert op order.id , het heeft gegarandeerd dezelfde waarde binnen elke groep.

In uw geval zijn alle waarden van qty hebben verschillende waarden binnen de groep.

Het is niet gegarandeerd uit welk record binnen de groep de engine de waarde zal halen.

Je zou dit moeten doen:

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
        )

Als u een index maakt op product (type, qty, id) , deze zoekopdracht werkt snel.




  1. Een aantal items van een boom opvragen

  2. welke query is beter en efficiënter - mysql

  3. Waarom is Datediff tussen GETDATE() en SYSDATETIME() in milliseconden altijd anders?

  4. Hoe meerdere joins met verschillende parameters in een enkele query uit te voeren