MySQL do zamawiania wielokolumnowych ASC i DESC
Mam 2 tabele MYSQL,
użytkowników
i
wyceny
... Szczegół:
- tabela użytkowników:
- tabela wyników:
Moim zamiarem jest uzyskanie listy 20 użytkowników, którzy mają sortowanie pola
zwrotnica
DESC (malejąco) i sortuj
avg_time Pola ASC (rosnąco). Używam zapytania:
SELECT users.username, scores.point, scores.avg_time
FROM scores, users
WHERE scores.user_id = users.id
GROUP BY users.username
ORDER BY scores.point DESC, scores.avg_time
LIMIT 0, 20
Wynik to:
Wynik jest nieprawidłowy, ponieważ pierwsza linia to dokładnie punkt = 100 i avg_time = 60.
Moje pożądane wyjście:
username point avg_time
demo123 100 60
demo123456 100 100
demo 90 120
Próbowałem wiele razy z różnymi zapytaniami, ale wynik był nadal zły. Czy mógłbyś podać mi jakieś rozwiązania?
Z góry dziękuję!
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
4 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
Więc teraz pytanie. Jeśli powyższe stwierdzenie jest poprawne, musisz zacząć od uzyskania najlepszego wyniku/średniego czasu na osobę i przypisania „Rangi” temu rekordowi. Można to łatwo zrobić ze zmiennymi MySQL @. Następnie po prostu włącz klauzulę HAVING, aby te wpisy zajmowały tylko 1 miejsce dla każdej osoby. Na koniec zastosuj kolejność najlepszych punktów i najkrótszego średniego czasu.
Wyniki przetworzone przez SQLFiddle
http://sqlfiddle.com/#!2/d131d/6
Zauważ, że ze względu na wbudowane @variables wymagane do uzyskania odpowiedzi, na końcu każdego wiersza znajdują się dwie dodatkowe kolumny. To jest tylko „pozostałość” i można ją zignorować w dowolnej rzeczywistej prezentacji wyjściowej, którą próbujesz wykonać ... LUB możesz zawinąć całość o jeden poziom, aby uzyskać tylko kilka kolumn, które chcesz, na przykład
Anonimowy użytkownik
Potwierdzenie od:
użytkownicy: punkty = 1: *
samo nie jest rozwiązaniem.
czy to twój zamiar?
(to zapytanie w celu uzyskania średniego wyniku wszystkich użytkowników i punktu środkowego avg_time malejąco, rosnąco) avg_time
jeśli chcesz uzyskać każdy punkt oceny? używając
Anonimowy użytkownik
Potwierdzenie od:
Daje ten sam wynik używając GROUP BY zamiast user @variables.
Anonimowy użytkownik
Potwierdzenie od:
username point avg_time
demo123 100 90 ---> id = 4
wersja demonstracyjna 123456 100 100 --- & > id = 7
demo 90 120 --- & > id = 1