sql >> Databasteknik >  >> RDS >> Mysql

Kommer gruppering av ett beställt bord alltid att returnera den första raden? MYSQL

Nej, detta är inte rätt tillvägagångssätt.

Jag tror att du talar om en fråga som denna:

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

Det du gör här är att använda MySQL s tillägg som låter dig välja oaggregerade/ogrupperade kolumner i en GROUP BY fråga.

Detta används mest i frågor som innehåller både en JOIN och en GROUP BY på en PRIMARY KEY , så här:

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

Här, order.customer är varken grupperad eller aggregerad, men eftersom du grupperar på order.id , den har garanterat samma värde inom varje grupp.

I ditt fall, alla värden på qty har olika värderingar inom gruppen.

Det är inte garanterat från vilken post inom gruppen motorn kommer att ta värdet.

Du bör göra så här:

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
        )

Om du skapar ett index på product (type, qty, id) , kommer den här frågan att fungera snabbt.




  1. Få modifierade förbeställningsträdövergångsdata till en array

  2. Hur man mappar postgresql tidsstämpel med tidszon i en JPA 2-enhet

  3. MySQL WHERE IN Query - BESTÄLLNING PER Match

  4. 4 sätt att få en vys definition med Transact-SQL