Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL连接问题-在匹配上下注的用户_Sql - Fatal编程技术网

SQL连接问题-在匹配上下注的用户

SQL连接问题-在匹配上下注的用户,sql,Sql,我有下表: user_id | total_points | #_of_fours | #_of_threes | #_of_twos 1 | 10 | 1 | 2 | 0 2 | 2 | 0 | 0 | 1 分数: user_id | match_id | points 1 | 110 | 4 1

我有下表:

user_id |  total_points | #_of_fours | #_of_threes | #_of_twos
   1    |       10      |      1     |       2     |     0
   2    |        2      |      0     |       0     |     1
分数:

user_id | match_id | points
   1    |   110    |   4
   1    |   111    |   3
   1    |   112    |   3
   2    |   111    |   2
用户在比赛中下注,并根据比赛结果获得积分。根据下注的准确程度,一场比赛你将获得0分、2分、3分或4分

现在我想对用户进行排名,这样我就可以知道谁排在第一、第二位等等。。。 排名顺序首先是总积分。如果这些值等于用户得分4分的次数,则等于用户得分3分的次数,依此类推

为此,我需要下表:

user_id |  total_points | #_of_fours | #_of_threes | #_of_twos
   1    |       10      |      1     |       2     |     0
   2    |        2      |      0     |       0     |     1
但是我不能找出能帮助我得到它的join语句

这是我在没有帮助的情况下得到的:

选择用户id,从分数中按用户id分组,点数为四分之四

导致

user_id | #_of_fours
    1   |      1
    2   |      0
现在,我必须为三分之二和总分做这些,并将其全部结合在一起,但我不知道如何做

顺便说一句,我正在使用MySQL


任何帮助都是非常感谢的。提前感谢

使用mysql语法,您可以使用SUM轻松计算匹配的行数

SELECT  user_id
,       sum(points) as total_points
,       sum(case when points = 4 then 1 end) AS #_of_fours 
,       sum(case when points = 3 then 1 end) AS #_of_threes
,       sum(case when points = 2 then 1 end) AS #_of_twos
FROM    scores
GROUP BY 
        user_id
SELECT 
  user_id, 
  SUM(points)   AS total_points,
  SUM(points=4) AS no_of_fours,
  SUM(points=3) AS no_of_threes,
  SUM(points=2) AS no_of_twos
FROM Table1
GROUP BY user_id;

演示。

使用mysql语法,您可以使用SUM轻松计算匹配的行数

SELECT 
  user_id, 
  SUM(points)   AS total_points,
  SUM(points=4) AS no_of_fours,
  SUM(points=3) AS no_of_threes,
  SUM(points=2) AS no_of_twos
FROM Table1
GROUP BY user_id;

演示。

不要忘记一个SUMpoints作为total_points,该示例输出hasHoly Cow,速度很快,看起来非常简单,非常感谢大家!这里也有同样的问题:它不应该是计数而不是四分之和吗?别忘了一个SUMpoints作为total points,这是样本输出hasHoly Cow的结果,速度很快,看起来很简单,非常感谢大家!同样的问题:这不应该是计数而不是四头埃切利奶牛的总和吗?这很快而且看起来很简单,非常感谢你们所有人!但有一个问题:考虑到我不想要总数,而是某人得分4的次数,难道不应该是计数而不是总和吗points@user1259801稍微简化了一点,但COUNT将对结果中的行进行计数,这意味着您需要4个不同的结果才能获得每个列的计数。它可以在一个查询中完成,但会更加复杂。求和将累加一个单独的列,因此,为每个匹配项生成一个列,为每个结果生成一个包含1的列,为每个不匹配项生成一个包含0的列,这将允许您在一个查询中求和。天哪,这很快,看起来非常简单,非常感谢大家!但有一个问题:考虑到我不想要总数,而是某人得分4的次数,难道不应该是计数而不是总和吗points@user1259801稍微简化了一点,但COUNT将对结果中的行进行计数,这意味着您需要4个不同的结果才能获得每个列的计数。它可以在一个查询中完成,但会更加复杂。SUM将累加一个单独的列,因此为每个匹配项生成一个列,为每个结果生成一个包含1的列,为每个不匹配项生成一个包含0的列,这样您就可以在一个查询中对这些列进行汇总。