2011-11-07 6 views
2

시나리오 1을 설명하고 수식 1의 모든 팀에 2 명의 드라이버가 있으며 24 명의 드라이버와 12 개의 팀이 있습니다. 아래에서 계산 한 점수를 team_stats 테이블에서 가져와야하지만 driver_stats 테이블에서 폴, 포디움 및 승리를 얻으므로 sebastion vettel 및 mark webber는 모두 team_id = '3'의 멤버이며 빨간색 황소입니다. 나는 각자를 위해 driver_stats 테이블에서 폴, 포디움, 승리를 얻고 함께 합산해야하지만 team_stats 테이블에서 팀의 포인트를 계산해야합니다. 내가 겪었던 것은 driver_stats 테이블에 두 개의 드라이버가 있기 때문에 각 team_id에 대해 팀 포인트를 두 번 계산한다는 것입니다. driver_stats 테이블에는 드라이버가 각 team_id에 대한 team_stats 테이블의 점에 대해 SUM을 수행하는 데 필요한 드라이버가 있기 때문에 의 회원입니다. 이 작동하지만 driver_stats 테이블에서 포인트를 계산 아래서로 다른 테이블에있는 두 개의 열에 대한 MYSQL SUM

DRIVER_STATS TABLE 
| track_id | drivers_id | qual_pos | race_pos | overtakes | points 

TEAM STATS TABLE 
| track_id | team_id | points | 

DRIVERS TABLE 
| driver_id | drivername | team_id | 

TEAM TABLE COLUMNS 
|team_id | teamname | value 

지금, 그것은 제대로 함께 두 개의 드라이버를 추가하여 .. 등등 추월 극의 합계를 수행합니다. 대신 team_stats 테이블의 각 team_id에 대한 점수 부분을 합산하기 위해 필요합니다. driver_stats 테이블에있는 각 2 개의 드라이버, 1 개의 팀에 2 개의 드라이버에 대해 해당 테이블에 하나의 발생이 있습니다.

SELECT t.teamname, 
     t.value, 
     SUM(IF(s.qual_pos = '1', 1,0)) AS poles, 
     SUM(IF(s.race_pos <= '3', 1,0)) AS podiums, 
     SUM(IF(s.race_pos = '1', 1,0)) AS victories, 
     SUM(s.overtakes) AS overtakes, 
     SUM(CASE 
      WHEN s.track_id = (SELECT MAX(track_id) FROM driver_stats) THEN 
      points 
      ELSE 
      0 
     End) AS lastracepoints, 
     SUM(points) AS points 

    FROM   drivers d 
    INNER JOIN driver_stats s 
    ON   d.drivers_id = s.drivers_id 
    AND   d.team_id = 3 
    LEFT JOIN teams t 
    ON   d.team_id = t.team_id 
    GROUP BY 
    t.teamname 

이 항목을 변경하여 사용해보십시오.

 SELECT t.teamname, 
     t.value, 
     SUM(IF(s.qual_pos = '1', 1,0)) AS poles, 
     SUM(IF(s.race_pos <= '3', 1,0)) AS podiums, 
     SUM(IF(s.race_pos = '1', 1,0)) AS victories, 
     SUM(s.overtakes) AS overtakes, 
     SUM(CASE 
      WHEN ts.track_id = (SELECT MAX(track_id) FROM team_stats) THEN 
      ts.points 
      ELSE 
      0 
     End) AS lastracepoints, 
     SUM(ts.points) AS points 

    FROM   drivers d 
    INNER JOIN driver_stats s 
    ON   d.drivers_id = s.drivers_id 
    AND   d.team_id = 3 
    LEFT JOIN teams t 
    ON   d.team_id = t.team_id 
    INNER JOIN team_stats ts 
    ON   ts.team_id = d.team_id 
    GROUP BY 
    t.teamname 

숫자는 좀는 각 드라이버를 두 번 team_stats 테이블의 합계를하고있는 것 같습니다, 그것에 team_stats에 가입하고 team_stats에 합 포인트를 변경하여이 일에 지금은 통제 불능으로 이동 driver_stats 테이블 어디 한번 완료해야합니다.

도움을 주시면 대단히 감사하겠습니다.

+1

일부 샘플 데이터/출력을 게시 할 수 있을까요? –

답변

0

는이 t.team_id에 가입하고, 내부에, 다른 LEFT와의 더 좋을 수도 가입 보면 ts.team_id 안 가입

관련 문제