![]() |
![]() ![]() |
![]() |
![]() ![]()
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: 915 Pomógł: 210 Dołączył: 8.09.2009 Skąd: Tomaszów Lubelski/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 82 Pomógł: 0 Dołączył: 6.09.2004 Ostrzeżenie: (20%) ![]() ![]() |
dobrze zgadłeś, chodziło o min() (IMG:style_emoticons/default/wink.gif)
dużo nauki jeszcze przede mną |
|
|
![]()
Post
#4
|
|
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). |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 124 Pomógł: 22 Dołączył: 10.01.2014 Ostrzeżenie: (0%) ![]() ![]() |
Dodam tylko do tego co napisali poprzednicy że propozycja struktury którą podałeś jest błędna bo będzie żreć więcej miejsca niż rozbicie tego na 2 tabele.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 26.08.2025 - 14:20 |