Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Czy grupowanie uporządkowanej tabeli zawsze zwróci pierwszy wiersz? MYSQL

Nie, to nie jest właściwe podejście.

Wydaje mi się, że mówisz o takim zapytaniu:

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

To, co tutaj robisz, to używanie MySQL rozszerzenie, które pozwala wybrać niezagregowane/niezgrupowane kolumny w GROUP BY zapytanie.

Jest to najczęściej używane w zapytaniach zawierających zarówno JOIN i GROUP BY na PRIMARY KEY , tak:

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

Tutaj, order.customer nie jest ani pogrupowany, ani zagregowany, ale ponieważ grupujesz według order.id , gwarantowana jest taka sama wartość w każdej grupie.

W twoim przypadku wszystkie wartości qty mają różne wartości w grupie.

Nie ma gwarancji, z którego rekordu w grupie wyszukiwarka pobierze wartość.

Powinieneś to zrobić:

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
        )

Jeśli utworzysz indeks na product (type, qty, id) , to zapytanie będzie działać szybko.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sterownik bazy danych CodeIgniter PDO nie działa

  2. Co to jest InnoDB i MyISAM w MySQL?

  3. Usuwanie dynamicznie zarządzanych tabel w MySQL

  4. Błąd MySQL:nie można utworzyć/zapisać do pliku '/var/mysqltmp/#sql_1fbd_0.MYI' (Errcode:13)

  5. Jak uruchomić zapytanie RAW SQL w PhalconPHP