用于游戏分数和SQL的SQL预测系统

时间:2013-10-08 16:41:11

标签: mysql sql

我正在使用PHP / MySQL建立一个Hockey Sports得分和预测系统。以下是系统设计。

我有一个GAMES表,其中有两个团队编号及其在游戏中的分数。此表中的列如下所示。

ID ---- TEAM1 ---- SCORE1 ---- TEAM2 ---- SCORE2
1       70         1           73         2
2       74         0           70         1
3       74         0           73         0

我还有一张PICKS表,其中显示了与用户游戏预测相关的详细信息。用户可以猜测哪支队伍将在游戏中获胜,并且该数据存储在此表中。该表中的列如下所示。每个用户每场比赛只能猜一次。

ID ---- GAME ---- USER ---- TEAM ---- POINT
1       1         1         70        1
2       2         1         70        1
3       3         1         73        1
3       1         2         70        1

基于以上可用数据,我正在尝试建立结果,其中每个用户(列USER)应该为每个正确的猜测授予点(列POINT)。可以根据GAMES表中的分数验证猜测。最终输出应如下所示。

USER ---- POINTS ---- CORRECT GUESS COUNT ---- WRONG GUESS COUNT
1         1           1                        2
2         0           0                        1

“CORRECT GUESS COUNT”和“WRONG GUESS COUNT”列表示用户完成的正确猜测和错误猜测的总数。

我已经为上面的表创建了一个SQL Fiddle,其中包含一些示例数据。

http://sqlfiddle.com/#!2/8d469/4/0

修改

  • 下面还有一些信息。游戏可能是一个游戏 画。
  • 在这种情况下,每个团队的得分为0。当一场比赛 用户不会得分。

2 个答案:

答案 0 :(得分:1)

SELECT p.user, 
       SUM(IF(g.id IS NOT NULL, p.point, 0)) As points, 
       SUM(IF(g.id IS NOT NULL, 1, 0)) Correct,
       SUM(IF(g.id IS NULL, 1, 0)) Wrong

FROM Games g 
RIGHT JOIN Picks p ON g.id = p.game AND 
          p.team = IF(g.score1 > g.score2 , g.team1, IF(g.score1 < g.score2, g.team2, NULL))
GROUP BY p.user;

SQL Fiddle(包含您的数据)

答案 1 :(得分:0)

如果有更多的MySQL方法可以做到这一点(背景是Oracle / SQL Server),你将不得不原谅我:

SELECT
  p.user
  ,sum(CASE
     WHEN p.team = g.winner THEN point ELSE 0 END) points
,sum(CASE
     WHEN p.team = g.winner THEN 1 ELSE 0 END) good_guess
,sum(CASE
     WHEN p.team <> g.winner THEN 1 ELSE 0 END) bad_guess
FROM
  picks p
INNER JOIN (
  SELECT
    id game_id
    ,CASE
       WHEN score1 > score2 THEN team1
       WHEN score2 > score1 THEN team2
       ELSE -1 --no team_id as negative
    END winner
    FROM
      games
) g
ON
  g.game_id = p.game
GROUP BY
  p.user