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

Pola którego wiersza są zwracane podczas grupowania z MySQL?

Który identyfikator zostanie zwrócony (1, 2 czy 3)?

O:Serwer wybierze dla wszystkich rekordów o tej samej nazwie żądany identyfikator (najprawdopodobniej najszybszy do pobrania, co jest nieprzewidywalne). Cytując oficjalną dokumentację:

Dużo więcej informacji w tym linku .

Jaki identyfikator ma to zapytanie do ORDER BY (tak samo, jak jest zwracane? ... zobacz pytanie 1 )?

Nie ma sensu dowiedzieć się, w jakiej kolejności pobrane dane zostaną zwrócone, ponieważ nie można przewidzieć wyniku, jaki uzyskasz. Jednak jest bardzo prawdopodobne, że otrzymasz wynik posortowany według nieprzewidywalnej kolumny ID.

Czy możesz kontrolować, który identyfikator jest zwracany / używany do zamówienia? np. Zwróć największy identyfikator lub pierwszy identyfikator z GRUPY.

W tym momencie powinieneś założyć, że nie możesz. Przeczytaj ponownie dokumentację.

Jeszcze jaśniej:nie można przewidzieć wyniku niewłaściwie użytej klauzuli GROUP BY. Główny problem z MySQL polega na tym, że pozwala na użycie go w niestandardowy sposób, ale musisz wiedzieć, jak z tej funkcji korzystać. Głównym celem jest grupowanie według pól, o których wiesz, że zawsze będą takie same. Np.:

SELECT id, name, COUNT( * ) AS frequency
FROM table
GROUP BY id

Tutaj znasz name będzie unikalny jako id funkcjonalnie określa name . Więc wynik, który znasz, jest poprawny. Jeśli pogrupujesz również według nazwy, to zapytanie będzie bardziej standardowe, ale będzie działać nieco gorzej w MySQL.

Na koniec weź pod uwagę, że z mojego doświadczenia wynika, że ​​wyniki w tych niestandardowych zapytaniach dla wybranych i niezgrupowanych pól są zwykle tymi, które można uzyskać stosując GROUP BY a następnie ORDER BY na tym polu. Dlatego tak często wydaje się pracować. Jeśli jednak będziesz dalej testować, w końcu dowiesz się, że dzieje się tak w 95% przypadków. I nie możesz polegać na tej liczbie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL nie wstawia odwrotnego ukośnika

  2. Zduplikuj / skopiuj rekordy w tej samej tabeli MySQL

  3. JSON_STORAGE_SIZE() – Znajdź rozmiar przechowywania dokumentu JSON w MySQL

  4. Jak sprawdzić, czy podczas korzystania z aktualizacji zduplikowanego klucza wiersz został wstawiony lub zaktualizowany?

  5. Zwróć tylko jeden wiersz z tabeli skrajnej po prawej dla każdego wiersza w tabeli skrajnej po lewej stronie