1

我有两张表,一张包含游戏的结果(玩了哪场比赛和赢得了多少场比赛),第二张列出了他们对给定比赛的正确选择(即正确百分比)。

我需要进行一次查询来计算用户在每场比赛中获胜的次数百分比。每个用户可能玩过不同数量的游戏。

我尝试使用 COUNT 来执行此操作,但如果我对计数函数进行分组以确定用户拥有玩家的次数,我就无法获得用户获胜的总次数。见小提琴..

http://sqlfiddle.com/#!2/defc3/1

UPDATE result, games_played
   SET result.precentage_correct = 
  (
    **SELECT (COUNT(gp.user_id)/COUNT(gp.user_id)*100)**
    FROM games_played as gp
    WHERE result.user_id = gp.user_id 
    AND gp.winner != 'n'
    AND gp.game = 1
    GROUP BY gp.user_id
  )
  WHERE games_played.user_id = result.user_id

所以,不知何故,我需要有两个不同的 COUNT 函数和一个数学运算符

4

1 回答 1

1

您可以简单地组合两个查询,一个只选择获胜记录,另一个选择所有查询。一旦你有了这两个计数,你就可以从中选择来计算比率。

SELECT user_id, 100*SUM(n_win)/SUM(n_total) AS pct_win FROM
(SELECT user_id, COUNT(user_id) AS n_win,
  NULL AS n_total
  FROM games_played
  WHERE winner != 'n'
    AND game = 1
  GROUP BY user_id
UNION SELECT user_id, NULL AS n_win,
  COUNT(user_id) AS n_total
  FROM games_played
  WHERE game = 1
  GROUP BY user_id
) AS counts
GROUP BY counts.user_id;

请注意,要组合查询,每个子查询中都有一个字段或字段n_win。查询将产生:n_totalNULL

USER_ID    PCT_WIN
1          50
2          66.6667
3          50
4          100

两个子查询的联合将为每个用户提供两条记录,一条记录n_win已知,另一条记录的值为n_total。对于前两个用户,它看起来像

USER_ID    N_WIN    N_TOTAL
1          1        NULL
2          2        NULL
1          NULL     2
2          NULL     3

外部查询从该联合中选择user_id并按n_win / n_total分组user_id,从而产生 50.0% 和 66.6%。我使用它是SUM因为它允许我NULL为每个用户收集每一列的非值。

于 2013-11-11T22:02:31.530 回答