Zapytanie SQL

0

Błagam niech ktoś mi podpowie jak to zrobić przeryłem goglami pół sieci, próbowałem kilka dni na 1000 sposobów i mi się nie udaje :(

mam baze w postgreSQL która wygląda w uproszczeniu tak:

nr_gry nr_kolejny numergracza
1 1 100
1 2 104
1 3 204
2 4 100
2 5 208
2 6 324
2 7 505
3 8 100
3 9 204
4 10 100
4 11 206
itd
tabela jest tak zrobiona ze kazda kolejna GRA dopisuje rekordy z NUMEREMGRY, NUMEREMKOLEJNYM i NUMEREMGRACZA w zależności od liczby uczestników dodaje się różna liczba rekordów

potrzebuje zrobić takie zapytanie że by mi pokazało SUMĘ ile razy grali ze sobą gracze 100 i 204.

Bardzo dziękuję za pomoc, jeśli ktoś sobie życzy mogę zapłacić przelewem za poświęcony czas.

0

Tabelę nazwę zestawienie_gier

 select count(1), zg.numergracza as gracz1, zg1.numergracza as gracz2 
  from zestawienie_gier zg 
    join zestawienie_gier zg1 on zg.nr_gry=zg1.nr_gry and zg.numergracza<>zg1.numergracza
 group by zg.numergracza, zg1.numergracza
where zg.numergracza=100 and zg1.numergracza=204;

Oczywiscie numerki graczy mozna wstawic do join, wtedy bedzie to efektywniejsze, ale tak też powinno być dobrze.

0

Proszę powiedz JAK TY TO ROBISZ - możesz podać książkę , stronę lub jakieś źródło, by nauczyć się tak szybko robić takie skomplikowane zapytania ?

Przerabiam to teraz na moim programie na moją tabelę - ale wstępnie wygląda DOBRZE, ale nie miałem szans tego wymyślić:(
Na szybko BARDZO DZIEKUJE, jak się uporam podziękuje jeszcze raz :)

0

Heh nigdy nie czytalem zadnej ksiazki, wertuje internet, fora, pisze sam ucząc się na własnych błędach, w pracy mam ciekawe zadania (nic tak nie uczy jak praca zawodowa).

Twoj problem jest dosc czesty więc nie az tak trudny, zapytanie też nie jest zbytnio skomplikowane. Jeśli coś nie będzie działać tak jak powinno, daj znać coś się wymyśli.

0

zwraca mi w wyniku coś takiego:
2 100 204
pierwsza liczba jest tą SUMĄ która jest okej - ale

JAK POZBYĆ SIĘ TYCH NUMERÓW GRACZY czyli w przykłaadzie 100 i 204

poniżej wkleje to zapytanie pisane z poziomu AutoHotKeya już takie jak mam w swojej bazie

SELECT count(1) , tt.player_id AS gracz1 , ss.player_id AS gracz2
from playerhandscashkeycolumns tt
JOIN playerhandscashkeycolumns ss
ON tt.pokerhand_id= ss.pokerhand_id
AND tt.player_id <> ss.player_id
WHERE tt.player_id = 46894 AND ss.player_id = 46895
GROUP BY tt.player_id , ss.player_id;

0

Wyrzuć z SELECTA tt.player_id AS gracz1 , ss.player_id AS gracz2.

0

Teraz będzie dobrze:

SELECT count(1) 
 from playerhandscashkeycolumns tt 
     JOIN playerhandscashkeycolumns ss  
        ON tt.pokerhand_id= ss.pokerhand_id  
       AND tt.player_id <> ss.player_id        
  WHERE tt.player_id  = 46894 AND ss.player_id  = 46895
GROUP BY  tt.player_id , ss.player_id;

Jednak te dane mogą się przydać gdy chcesz zobaczyć zestawienie gier wszystkich gracz (Wariacje). Dlatego proponuje pozostać przy pierwszym wariancie zapytania, bo wszystko i tak zależy od kodu wyświetlającego wynik. Btw takie informacje mogą się przydać poźniej, do sprawdzenia poprawności zapytania/wyniku.

Drobna rada, stosujac aliasy do tabel staraj sie aby byly one ich skrutami lub czyms co latwo skojarzyc z dana tabela. Aliasy jakich uzyles malo mowia do czego sie odnosza i za miesiac jak wrocisz do tego zapytania stracisz mnostwo czasu zeby do tego dojsc (przy bardziej zlozonym zapytaniu, gdzie pojawiaja sie podzapytania, więcej joinów, grupowania, ordery, limity to zmora każdego programisty).

0

Nie chce otwierać nowego wątku mam jeszcze chyba "proste" pytanie

Stworzyłem zapyatnie które zwraca taką tabelkę w której są tylko dwa wiersze pierszy wiersz mówi w ilu rozdaniach grali ci sami gracze , a drugi mówi w ilu nie grali

             ile                  

1 348
2 188

Chciałbym by baza zwróciła mi procent rozdań granych czyli 348/ (348+188) * 100

Co dopisać do zapytania , by zwracało mi jedną szukaną wartość?

0

Łatwiej byłoby gdybyś napisał to zapytanie.

0
SELECT CONVERT(varchar(10), cnt * 100 / sum(cnt)) + '%'
FROM
  (
  SELECT  COUNT(*) cnt
  FROM playerhandscashkeycolumns sb
  JOIN playerhandscashkeycolumns bb
  ON sb.pokerhand_id= bb.pokerhand_id
  WHERE bb.positiontype_id = 1
  AND sb.positiontype_id = 0
  AND bb.player_id  = 12880
  AND bb.preflopaction_id = 3
  AND sb.firstpreflopactiontype_id = 3
  group by bb.didvpip
  ) t

1 użytkowników online, w tym zalogowanych: 0, gości: 1