import sys from egd import connection cursor=connection.cursor() def yearStart(year): return "{0}-01-01".format(year) def playerYear(name,year): """Výsledky hráče s daným jménem pro daný rok.""" query=""" select name, datum, win_count, game_count, rating_after, rating_after-rating_before from players natural join players_performance as pp join tournaments as ts on pp.tournament_code=ts.code where name=? and datum>=date(?) and datum=date(?) and datum=date(?)) as subq join players_performance_tournaments as ppt on subq.pin=ppt.pin and subq.max_datum=ppt.datum natural join players where ppt.p_country_code=? order by rating desc """ res=cursor.execute(query,(date2,date2,date1,country)) print("pin\tcelé roky hraní\tprvní turnaj\trating") for rec in res: print("\t".join([str(x) for x in rec])) def _populationStrength(year,country): """Rozdělení populace země v daném roce podle ratingu (po stovkách). Uvažují se pouze aktivní hráči.""" date1=yearStart(year) date2=yearStart(year+1) query=""" select round((rating_after-50)/100)*100 as rating, count(ppt.pin) from players_performance_tournaments as ppt join (select pin,max(datum) as max_datum from players_performance_tournaments where datum>=date(?) and datum=date(?) and ppt2.datum=date(?) and datum=? and (?='' or country_code=?) group by pin order by max_rating desc""" res=cursor.execute(query,(strongerThan,country,country)) print("pin\tjméno\tmax rating") for rec in res: print("\t".join([str(x) for x in rec])) def timeToPeak(): """Jakého hráči dosáhli maximálního ratingu a jak dlouho jim to trvalo. Uvažuje hráče začínající s ratingem<=600 a s vrcholem před 1.1.2017.""" # join on pin, max_rating může duplikovat řádky, když měl hráč stejný max_rating vícekrát. # proto ten ošklivý vnější group by :-ú query=""" select subq.pin,min(min_rating),min(max_rating),min(_min_datum) as min_datum,min(datum) as peak_datum,min(datum)-min(_min_datum) as time_to_peak from players_performance_tournaments as ppt join (select pin,min(rating_before) as min_rating,max(rating_after) as max_rating,min(datum) as _min_datum from players_performance_tournaments group by pin having min_rating<=600) as subq on ppt.pin=subq.pin and ppt.rating_after=max_rating group by ppt.pin having peak_datum