sql >> Database teknologi >  >> RDS >> Mysql

Vil gruppering af et bestilt bord altid returnere den første række? MYSQL

Nej, det er ikke den rigtige tilgang.

Jeg tror, ​​du taler om en forespørgsel som denne:

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

Det du gør her er at bruge MySQL 's udvidelse, der giver dig mulighed for at vælge uaggregerede/ugrupperede kolonner i en GROUP BY forespørgsel.

Dette bruges mest i forespørgsler, der indeholder både en JOIN og en GROUP BY på en PRIMARY KEY , sådan her:

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

Her order.customer er hverken grupperet eller aggregeret, men da du grupperer på order.id , har den med garanti den samme værdi inden for hver gruppe.

I dit tilfælde er alle værdier af qty har forskellige værdier inden for gruppen.

Det er ikke garanteret, fra hvilken post i gruppen motoren vil tage værdien.

Du skal gøre dette:

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
        )

Hvis du opretter et indeks på product (type, qty, id) , vil denne forespørgsel fungere hurtigt.




  1. Sådan samles matchende par til forbundne komponenter i Python

  2. Hvordan sender man parameter til sql 'in' statement?

  3. Hvilket format er dette?

  4. SQL Server betinget rækkefølge efter