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

Proszę wyjaśnić funkcjonalność select max(...) ... grupuj według w sql

W przypadku użycia MAX() GROUP BY Klauzula zasadniczo mówi mechanizmowi zapytań, jak pogrupować elementy, z których ma zostać określone maksimum. W pierwszym przykładzie wybierałeś tylko jedną kolumnę, więc nie było potrzeby grupowania. Ale w drugim przykładzie miałeś wiele kolumn. Musisz więc powiedzieć silnikowi zapytań, jak określić, które z nich będą porównywane, aby znaleźć maksimum.

Kazałeś grupować według id kolumna. Co oznacza, że ​​będzie porównywać rekordy, które mają ten sam id i dać ci maksymalną wartość dla każdego unikalnego id . Ponieważ każdy rekord ma inny id , zasadniczo nie zrobiłeś nic z tą klauzulą.

Pogrupował wszystkie rekordy z id z 1 (który był pojedynczym rekordem) i zwrócił rekord z maksymalnym id z tej grupy (która była tym rekordem). To samo zrobiło dla 2 , 3 itp.

W przypadku trzech kolumn pokazanych tutaj, jedynym miejscem, w którym sensowne byłoby grupowanie rekordów, byłby test_id kolumna. Coś takiego:

SELECT MAX(id), title, test_id
FROM images
WHERE image IS NOT null 
GROUP BY test_id

Spowoduje to pogrupowanie ich według test_id , więc wyniki będą zawierać rekordy 6 (maksymalny id dla test_id 0), 4 (maksymalny id dla test_id 1) i 8 (maksymalny id dla test_id 2). Dzieląc rekordy na te trzy grupy na podstawie trzech unikalnych wartości w test_id kolumna, może skutecznie znaleźć „maksymalny” id w każdej grupie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Użyj relacyjnych baz danych MySQL w Debianie 5 (Lenny)

  2. Czy mysqldump obsługuje pasek postępu?

  3. Jak uzyskać kod kraju z wtyczki (intl-tel-input) po przesłaniu formularza?

  4. nie można wyświetlić wyników zapytania w widoku codeigniter

  5. docker mysqld:nie można odczytać katalogu '/etc/mysql/mysql.conf.d' (os errno 2 - brak takiego pliku lub katalogu)