Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL] dwa grupowania?
Michu
post 8.08.2009, 09:46:13
Post #1





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 15.10.2006
Skąd: zewsząd :P

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


Witam. Mam następującą tablicę:
votes (won, lost)

W tej tablicy znajduje się kilka tysięcy rekordów, każdy składa się z dwóch liczb (są to id rekordów z innych tablic). Moim zadaniem jest dowiedzieć się który id najczęściej wygrywał z innymi, czyli który ma najwięcej wygranych (won) w stosunku do wszystkich rekordów w których się znajduje ( won lub lost).

Zacząłem od zapytania sortującego według ilości wygranych:
  1. SELECT won, count(won) AS c_won FROM votes GROUP BY won ORDER BY c_won DESC

To działa, lecz gdy chcę do zapytania dołączyć ilość przegranych:
  1. SELECT won, count(won) AS c_won, count(lost) AS c_lost FROM votes GROUP BY won ORDER BY c_won DESC

Jest już gorzej. Czy dałoby się dodać jeszcze jedno grupowanie do zapytania? A może idę w złą stronę?

Z góry dzięki za poświęcony czas.
Go to the top of the page
+Quote Post
wookieb
post 8.08.2009, 09:57:17
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




  1. GROUP BY won, c_lost

?


--------------------
Go to the top of the page
+Quote Post
Michu
post 9.08.2009, 07:33:32
Post #3





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 15.10.2006
Skąd: zewsząd :P

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


nie, nie o to chodzi. Może postawię sprawę inaczej.
Mam tabelkę o następujących danych:
  1. INSERT INTO votes(won, lost) VALUES
  2. (1, 5),
  3. (5, 3),
  4. (2, 5),
  5. (1, 4),
  6. (2, 5),
  7. (4, 3),
  8. (1, 2),
  9. (2, 4),
  10. (2, 3)

Moim zadaniem jest otrzymać coś mniej więcej takiego:
id | wygrał | przegrał
1 3 0
2 4 1
3 0 3
4 1 2
5 1 3

Gdzie każdemu id przypisana jest jego ilość wygranych i przegranych. Jak to zrobić?


EDIT-----------------------------------------------
Rozwiązane. Oto kod:
  1. SELECT twon.id, cwon, clost FROM (SELECT won AS id, count(won) AS cwon FROM votes GROUP BY won) AS twon INNER JOIN (SELECT lost AS id, count(lost) AS clost FROM votes GROUP BY lost) AS tlost ON twon.id = tlost.id ORDER BY id DESC


Ten post edytował Michu 9.08.2009, 08:18:20
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 00:51