dataitgirls4 / team_5

데모데이 5조
https://dataitgirls4.github.io/team_5/
7 stars 5 forks source link

[사이드프로젝트] SQL 문제를 만들어보자! #34

Closed haein-kim closed 3 years ago

haein-kim commented 3 years ago

프로젝트와 윈윈하는 사이드 프로젝트, SQL 문제 만들기

프로젝트를 하면서, 판다스 혹은 SQL을 반드시 사용하게 되는데요!
그 과정에서 '이미 짠 코드'에 관해서, '문제'로 만들어 보는 걸 제안합니다.

example 알고 싶은 것: 킬 수가 높으면 1등을 할 확률이 높을까?
문제제시: match 마다 1등한 팀과 선수를 보여주고, 해당 매치에서 킬 수로 몇 등을 했는지 보여주는 쿼리를 짜보세요.

이때, 설계대로 짠 쿼리가 알고 싶은 것을 제대로 보여주는가? 다시 생각해볼 수 있습니다!
무리하지 않는 선에서, 생각나시면 1-2분 정도 내어서 여기에 정리해주시면 두고두고 도움이 될 거 같습니다😀

kwiseon commented 3 years ago
SELECT match_id, team_name, team_rank, SUM(kills) AS team_total_kills
FROM `as-pcs3as_matches_stats`
WHERE team_rank = 1
GROUP BY match_id

image

여기에 kill 수의 가점방식을 옆에 환산해볼 수 있으면 좋겠다.

haein-kim commented 3 years ago

순위 포인트와 킬 포인트 계산해주는 쿼리

sql_input = """
SELECT team_rank, AVG(placement+kills) AS total_points, AVG(placement), AVG(kills)
FROM
    (SELECT match_id, team_name, team_rank,
           (CASE WHEN team_rank = 1 THEN 10
               WHEN team_rank = 2 THEN 6
               WHEN team_rank = 3 THEN 5
               WHEN team_rank = 4 THEN 4
               WHEN team_rank = 5 THEN 3
               WHEN team_rank = 6 THEN 2
               WHEN team_rank = 7 THEN 1
               WHEN team_rank = 8 THEN 1
               ELSE 0
            END) AS placement,
           SUM(kills) AS kills
    FROM `as-pcs3as_matches_stats`
    GROUP BY match_id, team_name
    ORDER BY match_id, team_rank
        ) points
GROUP BY team_rank
"""
df_rank_avg = pd.read_sql_query(sql_input, conn)
df_rank_avg
haein-kim commented 3 years ago

100회 이상 참가한 한국 선수들(총32 명) 평균/합계 성적

Table: tournaments_ranks ⇒ 토너먼트 별 최종 랭크 및 성적 모음
**토너_id | 우승팀 | 랭킹 | total_pts | rank_pts | kill_pts**

USE pubg_esports;
SELECT player_name,
       COUNT(*) total_matches,
       COUNT(if(map_name='Miramar',map_name,null)) miramar,
       COUNT(if(map_name='Erangel',map_name,null)) erangel,
       COUNT(if(map_name='Erangel (Remastered)',map_name,null)) erangel_re,
       ROUND(AVG(kills), 3) avg_kills,
       ROUND(AVG(damage_dealt),2) avg_damages,
       ROUND(AVG(team_rank),2) avg_rank
FROM players_summary
GROUP BY player_name
ORDER BY total_matches DESC