• 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

Object Storage Arubacloud
0 głosów
287 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,710 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ź 240 wizyt
pytanie zadane 18 czerwca 2019 w SQL, bazy danych przez Maikel11 Początkujący (470 p.)
+1 głos
1 odpowiedź 305 wizyt
0 głosów
0 odpowiedzi 120 wizyt

92,551 zapytań

141,399 odpowiedzi

319,531 komentarzy

61,938 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...