Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Złożone zapytanie - sumy i grupowanie
Forum PHP.pl > Forum > Bazy danych > MySQL
piotrdd2
Witam

Moja tabela:
  1. CREATE TABLE IF NOT EXISTS `typer0910_typy` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `id_user` int(11) NOT NULL,
  4. `id_kol` int(11) NOT NULL,
  5. `id_mecz` int(11) NOT NULL,
  6. `gol1` int(11) NOT NULL,
  7. `gol2` int(11) NOT NULL,
  8. `pkt` int(11) NOT NULL,
  9. PRIMARY KEY (`id`)
  10. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=29 ;


Zapytanie:
  1. SELECT DISTINCT id_user, sum(pkt) FROM `typer0910_typy` GROUP BY id_user


Chciałbym rozwinąć zapytanie o to aby pokazywało mi ile pkt dany user zdobył w poszczególnych kolejkach

czyli cos takiego:
  1. SELECT DISTINCT id_user, (suma z 1 kolejki), (suma z 2 kolejki), (itd.), sum(pkt) AS suma_calosc FROM `typer0910_typy` GROUP BY id_user



sciana.gif można to jakoś wykonaćquestionmark.gif
oczywiście jeśli user nie brał udziału w danej kolejce aby wyświetliło "N"
eccocce
  1. SELECT id_user, id_kol, SUM(pkt)
  2. FROM typer0910_typy
  3. GROUP BY id_kol, id_user

może takie coś smile.gif

ewentualnie zamień sobie miejscami id_kol i id_user, jeśli chcesz mieć pogrupowane najpierw po userach a później po kolejkach
piotrdd2
Nie do końca załapałeś o co mi chodzi.

twoje zapytanie wyświetli mi 3 kolumny
a mi chodzi o kolumn 5 w przypadku 3 kolejek

w pierwszej kolumnie ID
w drugiej PUNKTY UŻYTKOWNIKA W 1 KOLEJCE
w trzeciej PUNKTY UŻYTKOWNIKA W 2 KOLEJCE
w czwartej PUNKTY UŻYTKOWNIKA W 3 KOLEJCE
w piątej SUMA PUNKTÓW 1kol+2Kol + 3kol

czyli np.
id 1k 2k 3k suma
13 3 2 3 8
11 2 2 2 6
55 1 3 1 5


idzie coś takiego wykonać?
skowron-line
Panie takie rzeczy to tylko w erze. Da się to zrobić ale musiałbyś kombinować z join ami.
eccocce
no fakt, nie załapałem za pierwszym razem ^^ mam nadzieję, że teraz jest już ok:

  1. SELECT t1.id_user, t1.KOL1, t2.KOL2
  2. FROM
  3. (
  4. SELECT id_user, SUM(pkt) AS KOL1
  5. FROM typer0910_typy
  6. WHERE id_kol=1
  7. GROUP BY id_kol, id_user
  8. ) AS t1
  9. LEFT JOIN
  10. (
  11. SELECT id_user, SUM(pkt) AS KOL2
  12. FROM typer0910_typy
  13. WHERE id_kol=2
  14. GROUP BY id_kol, id_user
  15. ) AS t2
  16. ON t1.id_user=t2.id_user


dla dwóch kolejek. Nie wiem, może są jakieś magiczne rozwiązania typu pętle w MySQL, ale ja ich nie znam, więc jeśli chcesz to rozwinąć na większą liczbę kolejek musisz analogiczne kopiować wszystko od linijki "LEFT JOIN" (włącznie) i zamieniać:
- KOL2 na KOLn
- id_kol=2 na id_kol=n
- AS t2 na AS tn
- ON t1.id_user=t2.id_user na t1.id_user=tn.id_user
- w pierwszym wierszu calego zapytania musisz tez dopisac ", tn.KOLn"
gdzie "n" to oczywiscie numer kolejki smile.gif

Chyba zdecydowanie wygodniej będzie użyć mojego poprzedniego zapytania, bo tam masz takie same wyniki tyle że zamiast w kolumnach to są w wierszach.

powodzenia

a co tam, dam ci jeszcze dla 3 kolejek:
  1. SELECT t1.id_user, t1.KOL1, t2.KOL2, t3.KOL3
  2. FROM
  3. (
  4. SELECT id_user, SUM(pkt) AS KOL1
  5. FROM typer0910_typy
  6. WHERE id_kol=1
  7. GROUP BY id_kol, id_user
  8. ) AS t1
  9. LEFT JOIN
  10. (
  11. SELECT id_user, SUM(pkt) AS KOL2
  12. FROM typer0910_typy
  13. WHERE id_kol=2
  14. GROUP BY id_kol, id_user
  15. ) AS t2
  16. ON t1.id_user=t2.id_user
  17. LEFT JOIN
  18. (
  19. SELECT id_user, SUM(pkt) AS KOL3
  20. FROM typer0910_typy
  21. WHERE id_kol=3
  22. GROUP BY id_kol, id_user
  23. ) AS t3
  24. ON t1.id_user=t3.id_user
piotrdd2
Pięknie! O to mi chodziło!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.