Skocz do zawartości

MySQL problem z selectem


Sokkerowiec

Rekomendowane odpowiedzi

Witam

rozwiązanie tej sprawy jest pewnie banalnie proste ale ja się kompletnie zamotałem.

Mam tabelę o takiej strukturze :

id|player_id|formation|rating|round|

1 | 1234 |0 | 96 |2

2 | 1238 |0 | 95 |1

3 | 1236 |2 | 84 |1

4 | 1234 |0 | 94 |3

oczywiście rekordów jest więcej

teraz chciałbym wyciągnąć informacje o 10 zawodnikach którzy zagrali z najlepsza notą na pozycji(formation) 0, uwzględniając wszystkie kolejki (round), ale tak aby player_id bylo unikalne.

probowałem tak:

SELECT DISTINCT player_id, formation, rating, round
FROM players_data WHERE formation=0 ORDER BY rating DESC

ale distinct tu nie zadziala bo zwróci dwa razy tego samego gracza:

1 | 1234 |0 | 96 |2

2 | 1238 |0 | 95 |1

4 | 1234 |0 | 94 |3

dla distinct to dwa różne rekordy działa prawidłowo ale nie o to mi chodzi.

chciałbym wyeliminować dublujące się player_id.

distinct dla semego player_id:

SELECT DISTINCT player_id FROM players_data WHERE formation =0
ORDER BY rating DESC LIMIT 10

zwraca 10 unikalych id ale nie mają one najwyższego rating, tak jak by najpierw wybierał unikalne id a poźniej dopiero sortował po rating :)

Każda podpowiedź mile widziana może trzeba to rozbić na jakieś dwa selecty ??

Czy Page Rank ma jeszcze jakikolwiek wpływ na rezultaty wyszukiwań ?! Z moich informacji wynika że NIE !!

Sokker Statystyki - moje skromne wypociny

Odnośnik do komentarza
Udostępnij na innych stronach

niestety tak się nie da:

MySQL zwrócił komunikat:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP BY player_id LIMIT 10' at line 1

Czy Page Rank ma jeszcze jakikolwiek wpływ na rezultaty wyszukiwań ?! Z moich informacji wynika że NIE !!

Sokker Statystyki - moje skromne wypociny

Odnośnik do komentarza
Udostępnij na innych stronach

a w odwrotnej kolejnosci?

SELECT * FROM players_data WHERE formation=0 GROUP BY player_id ORDER BY rating DESC LIMIT 10

W mysql dawno nie pisałem, jednak jest zasada, że pola zwracane w frazie select mają być te same jak we frazie Group by (poza funkcjami agregującymi - sum, min itp) SELECT * - zle w tym przypadku ...

Twoje zapytanie może wyglądać tak:

SELECT DISTINCT player_id, formation, rating, round

FROM players_data WHERE formation=0 AND

(player_id IN (SELECT DISTINCT player_id FROM players_data WHERE formation = 0)

)

ORDER BY rating DESC LIMIT 10

Nie sprawdzałem ale powinno być OK

Odnośnik do komentarza
Udostępnij na innych stronach

SELECT player_id, max(rating) FROM players_data WHERE formation=0 
GROUP BY player_id 
ORDER BY rating DESC LIMIT 10

Wykończeniówka Wrocław - jeśli szukasz firmy do remontu lub wykończenia mieszkania

FM Group sklep internetowy - sklep internetowy z produktami FM Group

Hokej Wrocław - amatorska drużyna hokejowa WTH Wrocław

Odnośnik do komentarza
Udostępnij na innych stronach

SELECT player_id, max(rating) FROM players_data WHERE formation=0 
GROUP BY player_id 
ORDER BY rating DESC LIMIT 10

albo krócej :)

Dzięki panowie za odzew wygląda na to że zwraca max rating tylko nie posortowany desc:

nie sortuje pewnie bo max(rating) to dane zagregowane tak ??

player_id max(rating)

6413822 95

1053100 94

4646199 94

5563593 94

4635725 95

5227051 96

753403 96

5663055 93

1100918 92

689223 94

coś jest jednak nie tak jak wybieram ręcznie to wychodzi mi:

5227051";"96"

3433198";"96"

753403";"96"

6413822";"95"

4635725";"95"

7283764";"95"

2854330";"94"

1053100";"94"

4646199";"94"

1718622";"94"

tak jak by group by player_id działało przed order br rating

Czy Page Rank ma jeszcze jakikolwiek wpływ na rezultaty wyszukiwań ?! Z moich informacji wynika że NIE !!

Sokker Statystyki - moje skromne wypociny

Odnośnik do komentarza
Udostępnij na innych stronach

sprobuj jeszcze tak

SELECT player_id, max(rating) bestscore FROM players_data WHERE formation=0 
GROUP BY player_id 
ORDER BY bestscore DESC LIMIT 10

Wykończeniówka Wrocław - jeśli szukasz firmy do remontu lub wykończenia mieszkania

FM Group sklep internetowy - sklep internetowy z produktami FM Group

Hokej Wrocław - amatorska drużyna hokejowa WTH Wrocław

Odnośnik do komentarza
Udostępnij na innych stronach

sprobuj jeszcze tak

SELECT player_id, max(rating) bestscore FROM players_data WHERE formation=0 
GROUP BY player_id 
ORDER BY bestscore DESC LIMIT 10

Działa rewelacyjnie o to własnie chodziło dzięki wielkie :)

Podziękowania kliknięte :P

Czy Page Rank ma jeszcze jakikolwiek wpływ na rezultaty wyszukiwań ?! Z moich informacji wynika że NIE !!

Sokker Statystyki - moje skromne wypociny

Odnośnik do komentarza
Udostępnij na innych stronach

a jednak coś jeszcze jest nie tak :(

SELECT id,player_id,rating FROM `players_data` WHERE formation =0
ORDER BY rating DESC

zwraca:

id player_id rating

79639 5227051 96

80895 3433198 96

394730 753403 96

355291 4635725 95

433790 5227051 95

237366 7283764 95

276643 5227051 95

18191 6413822 95

41245 3433198 95

516 1053100 94

oczywiście tu player_id się powtarza ale chodzi o kolumne id

SELECT id, player_id, max( rating ) bestscore
FROM players_data WHERE formation =0
GROUP BY player_id
ORDER BY bestscore DESC LIMIT 10

ten select zwraca:

id player_id bestscore

11 5227051 96

261 753403 96

1286 3433198 96

18191 6413822 95

164 7283764 95

158578 4635725 95

516 1053100 94

40536 689223 94

543 1829917 94

6684 6117786 94

dlaczego id są kompletnie inne niż powyżej ??

żeby bylo śmieszniej dla select player_id,rating from players_data where id=11

zwraca player_id 5227051 ale rating 92

Czy Page Rank ma jeszcze jakikolwiek wpływ na rezultaty wyszukiwań ?! Z moich informacji wynika że NIE !!

Sokker Statystyki - moje skromne wypociny

Odnośnik do komentarza
Udostępnij na innych stronach

SELECT DISTINCT(p.player_id), p.formation, p.rating, p.round FROM players_data p

WHERE p.formation = 0

ORDER BY p.rating DESC

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

doba, moglem cie troche naklamac, ale wygladalo wiarygodnie :) sprobuj tak

SELECT player_id, rating
FROM players_data pd
WHERE formation =0 AND rating
IN (

SELECT max( rating ) 
FROM players_data p
WHERE p.player_id = pd.player_id
)
GROUP BY player_id
ORDER BY rating DESC LIMIT 10

Wykończeniówka Wrocław - jeśli szukasz firmy do remontu lub wykończenia mieszkania

FM Group sklep internetowy - sklep internetowy z produktami FM Group

Hokej Wrocław - amatorska drużyna hokejowa WTH Wrocław

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności