2016-12-28 3 views
2

아래에이 쿼리 (각 플레이어는 게임의 다른 수를 해왔다 수 있으므로)이 mysql 쿼리를 수정하여 승률을 표시 하시겠습니까?

+---------+-----------+ 
| member | Wins | 
+---------+-----------+ 
| Player 1|  4  | 
| Player 2|  3  | 
| Player 3|  3  | 
+---------+-------------+ 

는 내가 보여주고 싶은 데이터가 더 유용하게하려면 :

SELECT member, count(*) Wins 
FROM (SELECT player2_name as member from results 
WHERE player1_id = 2 AND player1_result = 'W' AND community_id = 16 
UNION ALL SELECT player1_name FROM results WHERE player2_id = 2 
AND player2_result = 'W' AND community_id = 16) AS T 
group by member ORDER BY Wins DESC 

같은 결과를 생성합니다 추가 열 '승리 비율'.

-> 이것은 각 플레이어가 플레이 한 게임 수에 기반합니다.

+---------+-----------+---------------+---------+ | member | Wins | Games Played | Win % | +---------+-----------+---------------+---------+ | Player 1| 4 | 8 | 0.50 | | Player 2| 3 | 3 | 1.00 | | Player 3| 3 | 5 | 0.60 | +---------+-----------+---------------+---------+

내가 바라고있다 - %를 출력하는 MySQL을 직접 할 수없는 경우 다음 진수 나는 아래와 같은 출력을 생성하기 위해 기존 쿼리를 수정할 수있는 방법 0.76

즉, 잘 될 것입니다

SELECT GamesPlayed FROM (SELECT player1_name as member from results 
WHERE player1_id = 2 AND community_id = 16 
UNION ALL SELECT player2_name FROM results WHERE player2_id = 2 
AND community_id = 16) AS GP 

다음 행 1 : 단지의 라인을 따라 뭔가를 추가하는

SELECT member, count(*) Wins, round(sum(wins/GamesPlayed(1),2) WinPercentage 
,

하지만 그게 얼마나 힘든 일인지 잘 모르겠다.

최신 테스트 데이터 :이 같은 enter image description here

+0

는 여전히 데이터베이스 스키마를 변경할 수 있습니까? "게임"(참가자 당 하나) 당 두 개의 레코드가있는 테이블은 작업하기가 훨씬 쉽습니다. – Mr47

+0

내가 할 수 있지만 내가 선호하지 않을거야 ... – RDowns

답변

2

뭔가?

업데이트 쿼리

SELECT 
    T.member 
    , count(*) Wins 
    , total.gamesPlayed 
    , count(*)/total.gamesPlayed as winPercentage 
FROM 
    (
     SELECT 
      player2_name as member 
     from results 
     WHERE 
      player1_id = 2 
      AND player1_result = 'W' 
      AND community_id = 16 
     UNION ALL 
     SELECT 
      player1_name 
     FROM results 
      WHERE player2_id = 2 
      AND player2_result = 'W' 
      AND community_id = 16 
    ) AS T 
    , (
      select 
       u.member 
       , sum(u.gamesPlayed) as gamesPlayed 
      from 
       (
        select 
         player2_name as member 
         , count(*) gamesPlayed 
        from results 
        where 
         player1_id = 2 
         AND community_id = 16 
        group by player2_name 
        union 
        select 
         player1_name as member 
         , count(*) gamesPlayed 
        from results 
        where 
         player2_id = 2 
         AND community_id = 16 
        group by player2_name 
       ) as u /* union of two */ 
      group by member 
    ) as total 
where 
    T.member = total.member 
group by T.member 
ORDER BY Wins DESC 
+0

리, 그냥 31 라인에 오류가 발생했습니다. # 1064 - SQL 구문에 오류가 있습니다; 'count (*) games 근처에서 사용할 올바른 문법은 MySQL 서버 버전에 해당하는 매뉴얼을 확인하십시오. 게임 결과 : at line 31 – RDowns

+0

죄송합니다. 31 행과 40 행에 각각 쉼표 2 개를 잊어 버렸습니다. (*)'서브 쿼리'u '). 테이블이 없으므로 쿼리를 실행할 수 없어 다른 사소한 구문 오류가있을 수 있지만 잘하면 내 쿼리를 통해 합계를 찾는 방법을 알 수 있으며 거기에서 쿼리를 가져올 수 있습니다. – leeyuiwah

+0

거의 다되었지만 잘못된 플레이어에게 잘못된 데이터를 제공하고 있습니다. 설명 할 스크린 샷을 업로드합니다. 술탄을 상대로 한 플레이는 4이어야하고 G에 대한 gamesPlay는 1이어야합니다 ... – RDowns

관련 문제