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

mysql:select max(score) nie zwraca odpowiednich danych wiersza

Używasz MAX , która jest funkcją agregującą. Funkcje agregujące powodują traktowanie wielu wierszy w tabeli jako grupy. Jeśli nie zrobisz nic specjalnego, wszystkie wiersze w całej tabeli zostaną użyte jako jedna duża grupa, a gdy funkcja agregująca, taka jak MAX jest tam, wszystkie te wiersze zostaną skondensowane w jednym wierszu zbiorczym. Ten efekt kondensacji wystąpiłby również w przypadku innych funkcji agregujących, takich jak MIN , SUM , GROUP_CONCAT i znajomych (patrz:http://dev. mysql.com/doc/refman/5.1/en/group-by-functions.html ). Możesz również zastosować określone grupowania za pomocą GROUP BY konstruktu, ale jeśli tego nie zrobisz, wystąpienie funkcji agregującej po prostu zbierze wszystkie wiersze w jeden (ale to grupowanie następuje po zastosowaniu WHERE warunek, więc tylko filtrowane wiersze są agregowane)

Teraz, z powodu tego kondensującego lub „redukującego” efektu funkcji agregatów, istnieje sposób na zrobienie jednej wartości z wielu wartości. Dla MAX , w ten sposób wyświetla się tylko maksymalna wartość znaleziona dla wszystkich wystąpień wyrażenia, które przekazałeś jako argument do MAX . Ale twoje inne kolumny nie mają takiej funkcji agregującej. W przypadku większości produktów bazodanowych występowanie zarówno niezagregowanych, jak i zagregowanych kolumn w SELECT lista byłaby błędem. Ale MySQL zachowuje się niewłaściwie/odmiennie i zwraca tylko jedną z dostępnych wartości dla każdego wyrażenia niezagregowanego wymienionego w SELECT fragment. Która wartość jest do mysql - nie możesz polegać na żadnym konkretnym algorytmie.

W wielu przypadkach ludzie chcą zrobić coś z „dowolnym wierszem, który ma maksymalną wartość”, innymi słowy, znaleźć wiersz, który ma wartość maksymalną, ale użyj innych kolumn z tego wiersza bez agregacji. Rozwiązanie dostarczone przez middaparkę robi to i istnieją inne sposoby, aby to osiągnąć (google dla MySQL maksimum grupowo). Aby uzyskać więcej ogólnych informacji o funkcjach agregujących i związanych z nimi elementach GROUP BY klauzulę, możesz rzucić okiem na mój artykuł -shameless selfplug- tutaj:http://rpbouman.blogspot.com/2007/05/debunking-group-by-myths.html



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dziesięć najlepszych narzędzi GUI MySQL

  2. połącz się z bazą danych mysql za pomocą biblioteki phpseclib

  3. Zdalne zgłaszane połączenia mySQL nie mogą połączyć się z MySQL 4.1+ przy użyciu starego, niezabezpieczonego błędu uwierzytelniania z XAMPP

  4. Kursor MySql - Tworzenie procedury

  5. Zachowaj podziały wierszy z TextArea podczas pisania w MySQL