Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Złożone zapytanie - sumy i grupowanie, wyświetlanie sum grupowanych wg id
piotrdd2
post
Post #1





Grupa: Zarejestrowani
Postów: 136
Pomógł: 2
Dołączył: 13.05.2003
Skąd: Przemyśl

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


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



(IMG:style_emoticons/default/sciana.gif) można to jakoś wykonać(IMG:style_emoticons/default/questionmark.gif)
oczywiście jeśli user nie brał udziału w danej kolejce aby wyświetliło "N"

Ten post edytował piotrdd2 14.03.2010, 12:33:13
Go to the top of the page
+Quote Post
eccocce
post
Post #2





Grupa: Zarejestrowani
Postów: 165
Pomógł: 5
Dołączył: 10.07.2008
Skąd: Wrocław

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


  1. SELECT id_user, id_kol, SUM(pkt)
  2. FROM typer0910_typy
  3. GROUP BY id_kol, id_user

może takie coś (IMG:style_emoticons/default/smile.gif)

ewentualnie zamień sobie miejscami id_kol i id_user, jeśli chcesz mieć pogrupowane najpierw po userach a później po kolejkach

Ten post edytował eccocce 14.03.2010, 20:38:20
Go to the top of the page
+Quote Post
piotrdd2
post
Post #3





Grupa: Zarejestrowani
Postów: 136
Pomógł: 2
Dołączył: 13.05.2003
Skąd: Przemyśl

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


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ć?
Go to the top of the page
+Quote Post
skowron-line
post
Post #4





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


Panie takie rzeczy to tylko w erze. Da się to zrobić ale musiałbyś kombinować z join ami.
Go to the top of the page
+Quote Post
eccocce
post
Post #5





Grupa: Zarejestrowani
Postów: 165
Pomógł: 5
Dołączył: 10.07.2008
Skąd: Wrocław

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


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 (IMG:style_emoticons/default/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


Ten post edytował eccocce 15.03.2010, 13:37:42
Go to the top of the page
+Quote Post
piotrdd2
post
Post #6





Grupa: Zarejestrowani
Postów: 136
Pomógł: 2
Dołączył: 13.05.2003
Skąd: Przemyśl

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


Pięknie! O to mi chodziło!
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 Aktualny czas: 22.08.2025 - 20:49