Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> 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
 
Start new topic
Odpowiedzi
eccocce
post
Post #2





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

Posty w temacie


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: 3.10.2025 - 14:05