• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

MySQL - zapytanie grupujące wyniki w zależności od jednego wyniku

Cloud VPS
0 głosów
366 wizyt
pytanie zadane 26 kwietnia 2017 w SQL, bazy danych przez fmc Początkujący (260 p.)
Dzień dobry!

Mam tabelę, gdzie są 3 kolumny: id, id_gracz, data, wynik. Wynik może być 2 (wygrana) lub 0 (przegrana). Mamy 6 graczy. Poniżej przykładowa tabela z danymi dla 1 meczu.

id id_gracza data wynik

1, 1, 2017-04-25, 2

2, 2, 2017-04-25, 0

3, 3, 2017-04-25, 2

4, 4, 2017-04-25, 2

5, 5, 2017-04-25, 0

6, 6, 2017-04-25, 0

Oczywiście meczy jest kilka. Nie mogę sobie poradzić z wydaje mi się prostym zapytaniem.

Potrzebuję uzyskać następującą informację ile meczy zostało wygranych (2) przez poszczególnych graczy, gdy gracz np. nr 3 wygrał mecz. Chciałbym uzyskać mniej więcej taką tabelę wynikową.

id_gracza wygrane

1, 4

2, 2

4, 1

5, 3

6, 2

Głowię się nad tym problemem już drugi dzień. Napisałem kilkanaście zapytań, przejrzałem 2 książki i kilkadziesiąt stron i nie mogę sobie z tym poradzić. Wydaje mi się, że problem jest trywialny ale zaciąłem się.

Pozdrawiam

2 odpowiedzi

0 głosów
odpowiedź 26 kwietnia 2017 przez Boshi VIP (100,240 p.)
SELECT id_gracza, COUNT(wynik) from tabela group by id_gracza

 

komentarz 26 kwietnia 2017 przez fmc Początkujący (260 p.)
Dziękuję bardzo za odpowiedz ale to zapytanie podaje liczbę wygranych każdego z graczy. To już przećwiczyłem. Ja nastomiast potrzebuję liczbę wygranych poszczególnych graczy tylko w tych meczach w których wygrywał np gracz nr 4. Myślę, że potrzebne jest podzapytanie ale przećwiczyłem już kilka różnych i nie uzyskuję porządanego efektu.

Pozdrawiam
0 głosów
odpowiedź 26 kwietnia 2017 przez Chess Szeryf (76,730 p.)
edycja 26 kwietnia 2017 przez Chess
create database mecze;

use mecze;

create table mecze(id int auto_increment primary key,
id_gracza int,
data date, 
wynik int
);

insert into mecze values(1, 1, "2017-04-25", 2),
(2, 2, "2017-04-25", 0),
(3, 3, "2017-04-25", 2),
(4, 4, "2017-04-25", 2),
(5, 5, "2017-04-25", 0),
(6, 6, "2017-04-25", 0);

create table wygrane(id_gracza int, wygrane int);

insert into wygrane values(1,2),
(3,2),
(4,2),
(45,4),
(20,6),
(35,8);

create table wyniki(id_gracza int,wynik int);

insert into wyniki values(1,1),
(3,1),
(4,1),
(45,2),
(20,3),
(35,4);

select * from wyniki where wynik=(select max(wynik) from wyniki);

Tabele wykonałem poglądowo jak to powinno wyglądać po wykonaniu odpowiedniego zapytania select().

1. Najpierw trzeba przekonwertować z tabeli mecze dane z kolumny wynik. Czyli cyfra 2 to 1 punkt. 4 to 2, 6 to 3, 8 to 4 itd....

2. Z przekonwertowanych liczb trzeba wybrać największą, czyli w tym przykładzie będzie to:

id_gracza wynik
35 4

, bo jest liczbą przekonwertowaną z liczby 8.

Myślę, że wiesz o co mi chodzi.

W skrócie:

Teraz tylko trzeba z tabeli pierwszej wykonać zapytanie select(), które przekonwertuje liczby z tabeli pierwszej na wynik, czyli jak wcześniej napisałem 2 na 1, 4 na 2 itd.... Następnie trzeba wykonać podzapytanie select(), które z przekonwertowanych liczb policzy kto wygrał, czyli ma najwięcej punktów.

Chciałbym jednak podkreślić to iż, mój kod jest tylko kodem poglądowym.

Trzeba sobie postawić pytanie: Co trzeba zrobić, aby z tabeli pierwszej, czyli mecze przejść do tabeli trzeciej, czyli wyniki poprzez polecenie select(), wykonując zapytania i podzapytania.

komentarz 26 kwietnia 2017 przez fmc Początkujący (260 p.)
Dzięki. Rozwiązanie ciekawe. Wydaje mi się jednak, że wystarczy dobre zapytanie w SQL. Jak przeglądałem książki to nasunęło mi się skojarzenie ze sztandarowym problemem w stylu ile dany klient złożył zamówień na dany towar. U mnie jest taka różnica, że zamiast klientów są gracze, zamiast tych samych towarów są mecze a zamówienia to wyniki. I zastanawiam się czy nie mam błędu w tabeli, bo nie wydaje mi się, żeby nie dało się to rozwiązać zwykłym zapytaniem.

Jeszcze raz dzięki za pomoc.

Podobne pytania

0 głosów
1 odpowiedź 345 wizyt
pytanie zadane 18 czerwca 2019 w SQL, bazy danych przez Maikel11 Początkujący (470 p.)
+1 głos
1 odpowiedź 361 wizyt
0 głosów
0 odpowiedzi 305 wizyt

93,453 zapytań

142,448 odpowiedzi

322,718 komentarzy

62,831 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...