Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> GROUP BY, zdublowane wartości
leonw
post 10.02.2017, 19:24:10
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 8.01.2017

Ostrzeżenie: (0%)
-----


Witam

Temat wygląda następująco:
Mam trzy tabele (Alias, Player, WeaponData), każda związana z każdą przez "Player_ID".
W pierwszej tabeli "Alias", konkretna wartość (w tym przypadku 3) powtarza się dwa razy.
Teraz jeżeli wyciągam wartości z trzeciej tabeli, zgrupowane wg. player_ID, dostaje podwojony wynik.
Podejrzewam, że jest to związane przez wystąpienie tego samego "Player_ID" w tabeli "Alias" dwa razy.

Jeżeli w tym zapytaniu pominę tabelę "Alias", to wynik otrzymuję poprawny.

Tak wygląda zapytanie:
  1. SELECT Player.ID,
  2. Alias.Name,
  3. Player.AsAllied,
  4. Player.AsAxis,
  5. Player.TotalTime,
  6. Player.IsBot,
  7. SUM(WeaponData.Kills) AS Kills,
  8. SUM(WeaponData.Deaths) AS Deaths
  9.  
  10. FROM Alias, Player, WeaponData
  11. WHERE WeaponData.Player_ID=Player.ID
  12. AND Alias.Player_ID=Player.ID
  13.  
  14. GROUP BY WeaponData.Player_ID


Jakieś podpowiedzi, dla czego tak się dzieje?
Go to the top of the page
+Quote Post
kicaj
post 11.02.2017, 13:37:27
Post #2





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

Ostrzeżenie: (0%)
-----


DISTINCT po kolumnie zduplikowanej?


--------------------
PHP Developer

"Nadmiar wiedzy jest równie szkodliwy jak jej brak" Émile Zola
Go to the top of the page
+Quote Post
leonw
post 11.02.2017, 13:46:09
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 8.01.2017

Ostrzeżenie: (0%)
-----


Udało mi się rozwiązać ten problem, choć nie wiem czy prawidłowo.
Zapytanie:
  1. SELECT Player.ID,
  2. (SELECT Alias.Name FROM Alias WHERE Alias.Player_ID=Player.ID GROUP BY Alias.Player_ID) AS Name,
  3. Player.AsAllied,
  4. Player.AsAxis,
  5. Player.TotalTime,
  6. Player.IsBot,
  7. SUM(WeaponData.Kills) AS Kills,
  8. SUM(WeaponData.Deaths) AS Deaths
  9.  
  10. FROM Player, WeaponData
  11.  
  12. WHERE Player.ID=WeaponData.Player_ID
  13.  
  14. GROUP BY WeaponData.Player_ID


wyświetla prawidłowy wynik. Jakoś nie do końca mogę pojąć jak to działa.
W poprzednim zapytaniu wynik "SUM(WeaponData.Kills) AS Kill" był mnożony tyle razy, ile razy dane ID występowało w "Alias". Tj. prawidłowy wynik to 8, jeżeli w "Alias" dane ID występowało 2x, wynik = 16, jeżeli 3x, wynik = 24.

Cytat(kicaj @ 11.02.2017, 13:37:27 ) *
DISTINCT po kolumnie zduplikowanej?


Użycie DISTINCT nie przynosi żadnej zmiany.

Ten post edytował leonw 11.02.2017, 13:54:45
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 13:31