![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 82 Pomógł: 0 Dołączył: 6.09.2004 Ostrzeżenie: (20%) ![]() ![]() |
ciąglę się uczę i nie mogę zrozumieć jednego, dlaczego mi tak dziwnie sortuje zapytanie
baza jest następująca
a zapytanie
zwraca wp.pl 40 ms onet.pl 72 ms mbank.pl 83 ms netflix.com 307 ms czy błąd jest w strukturze bazy (INT dla ms) czy w zapytaniu? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 282 Pomógł: 89 Dołączył: 12.04.2011 Ostrzeżenie: (0%) ![]() ![]() |
GROUP BY służy do wykorzystywania z funkcjami agregującymi, takimi jak COUNT(), SUM(), MIN(), MAX() itd. Baza danych widzać takie coś w zapytaniu każdą grupę (w przypadku `GROUP BY domena` wszystkie rekordy mające taką samą domenę) spłaszcza do jednego rekordu. Przy standardowej składni w SQL w SELECT nie można wrzucić nic oprócz kolumn po których grupujemy i funkcji agregujących. Mysql pozwala na trochę więcej, można również dodać inne kolumny (które określa się w tym wypadku jako hidden columns), ale trzeba wiedzieć, że nie wiemy z którego dokładnie rekordu w danej grupie zostaną pobrane do nich dane. Przy prostej tabeli najprawdopodobniej będzie to pierwszy rekord z grupy wg klucza głównego, ale przy istniejących innych indeksach może być zupełnie inaczej.
To tak jak gdyby zapytać się: - Jaka jest najwyższa pensja w firmie, jaka jest najniższa i jak się nazywa pracownik? - Ale który pracownik? - Którykolwiek Wracając do podanego zapytania - grupujesz wg domeny, dla każdej bierzesz pierwszy z brzegu ping i otrzymany set sortujesz wg najmniejszego pingu. ORDER BY zawsze sortuje wyniki już pogrupowane, jeśli chcesz dla każdej znaleźć najmniejszy to po prostu użyj MIN(ms). |
|
|
![]() ![]() |
![]() |
Aktualny czas: 17.10.2025 - 21:01 |