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.