sql >> Databáze >  >> RDS >> Mysql

Vrátí seskupení uspořádané tabulky vždy první řádek? MYSQL

Ne, toto není správný přístup.

Věřím, že mluvíte o dotazu jako je tento:

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

Vy zde používáte MySQL rozšíření 's, které vám umožňuje vybrat neagregované/neseskupené sloupce v GROUP BY dotaz.

To se většinou používá v dotazech obsahujících jak JOIN a GROUP BY na PRIMARY KEY , takto:

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

Zde order.customer není seskupený ani agregovaný, ale protože seskupujete na order.id , je zaručeno, že bude mít v každé skupině stejnou hodnotu.

Ve vašem případě všechny hodnoty qty mají v rámci skupiny různé hodnoty.

Není zaručeno, ze kterého záznamu v rámci skupiny motor převezme hodnotu.

Měli byste udělat toto:

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
        )

Pokud vytvoříte index pro product (type, qty, id) , bude tento dotaz fungovat rychle.




  1. Mohu spojit dvě tabulky, přičemž spojená tabulka je setříděna podle určitého sloupce?

  2. Historizace databáze

  3. MySQL Round Robin Select

  4. PgAdmin4 povolit ladění