Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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
mysql在总和和最佳分数上的排名_Mysql - Fatal编程技术网

mysql在总和和最佳分数上的排名

mysql在总和和最佳分数上的排名,mysql,Mysql,我有一张这样结构的桌子: score_id | user_id | category | subcategory | score 1 | 1 | game | 0 | 100 2 | 1 | game | 0 | 200 3 | 1 | quiz | 0 | 2000 4 | 1 | quiz | 1

我有一张这样结构的桌子:

score_id | user_id | category | subcategory | score
1        | 1       | game     | 0           | 100
2        | 1       | game     | 0           | 200
3        | 1       | quiz     | 0           | 2000
4        | 1       | quiz     | 1           | 1000
5        | 1       | game     | 0           | 10
6        | 1       | game     | 1           | 10
7        | 1       | game     | 2           | 100
8        | 1       | game     | 1           | 500
9        | 2       | game     | 0           | 600
我需要不同的查询mysql:


1按用户id分组的所有团队排名类别和子类别用户所有记录中所有最佳结果的总和

预期结果

user_id | total_score | ranking
1       | 3310        | 1
2       | 600         | 2
在哪里

解决方案@草莓谢谢

SELECT a.*
     , @i:=@i+1 rank
  FROM 
     ( SELECT user_id
            , SUM(subtotal) total 
         FROM 
           ( SELECT user_id
                   , category
                   , subcategory
                   , MAX(score) subtotal 
                FROM my_table 
               GROUP 
                  BY user_id
                   , category
                   , subcategory
            ) x 
        GROUP 
           BY user_id
     ) a
  JOIN 
     ( SELECT @i:=0) vars
 ORDER
    BY total DESC;
SELECT a.*
     , @i:=@i+1 rank
  FROM 
     ( SELECT user_id
            , SUM(subtotal) total 
         FROM 
           ( SELECT user_id
                   , category
                   , subcategory
                   , MAX(score) subtotal 
                FROM my_table
                WHERE category = 'game' // or 'quiz
               GROUP 
                  BY user_id
                   , category
                   , subcategory
            ) x 
        GROUP 
           BY user_id
     ) a
  JOIN 
     ( SELECT @i:=0) vars
 ORDER
    BY total DESC;
SELECT a.*
     , @i:=@i+1 rank
  FROM 
     ( SELECT user_id
            , SUM(subtotal) total 
         FROM 
           ( SELECT user_id
                   , category
                   , subcategory
                   , MAX(score) subtotal 
                FROM my_table
                WHERE category = 'game'
                AND subcategory = '0'
               GROUP 
                  BY user_id
                   , category
                   , subcategory
            ) x 
        GROUP 
           BY user_id
     ) a
  JOIN 
     ( SELECT @i:=0) vars
 ORDER
    BY total DESC;
2按用户id分组的所有团队的排名所有用户记录中所有最佳结果的总和,仅用于游戏或测验的类别和子类别

预期结果游戏

user_id | total_score | ranking
2       | 600         | 1
1       | 310         | 2
user_id | total_score | ranking
2       | 600         | 1
1       | 310         | 2
在哪里

600 = (600)
 600 is the best result of game 0, 

310 = (200 + 10 + 100) 
 200 is the best result of game 0, 
 10 is the best result of game 1, 
 100 is the best result of game 2,
3000 = (200 + 10 + 100) 
 2000 is the best result of quiz 0
 1000 is the best result of quiz 1

 0= (0)
(user_id= 2 don't play quiz)
600 = (600)
 600 is the best result of game 0, 

200 = (200 ) 
 200 is the best result of game 0, 
预期成绩测验

user_id | total_score | ranking
1       | 3000       | 1
2       | 0          | 2
在哪里

600 = (600)
 600 is the best result of game 0, 

310 = (200 + 10 + 100) 
 200 is the best result of game 0, 
 10 is the best result of game 1, 
 100 is the best result of game 2,
3000 = (200 + 10 + 100) 
 2000 is the best result of quiz 0
 1000 is the best result of quiz 1

 0= (0)
(user_id= 2 don't play quiz)
600 = (600)
 600 is the best result of game 0, 

200 = (200 ) 
 200 is the best result of game 0, 
基于@草莓的解决方案谢谢

SELECT a.*
     , @i:=@i+1 rank
  FROM 
     ( SELECT user_id
            , SUM(subtotal) total 
         FROM 
           ( SELECT user_id
                   , category
                   , subcategory
                   , MAX(score) subtotal 
                FROM my_table 
               GROUP 
                  BY user_id
                   , category
                   , subcategory
            ) x 
        GROUP 
           BY user_id
     ) a
  JOIN 
     ( SELECT @i:=0) vars
 ORDER
    BY total DESC;
SELECT a.*
     , @i:=@i+1 rank
  FROM 
     ( SELECT user_id
            , SUM(subtotal) total 
         FROM 
           ( SELECT user_id
                   , category
                   , subcategory
                   , MAX(score) subtotal 
                FROM my_table
                WHERE category = 'game' // or 'quiz
               GROUP 
                  BY user_id
                   , category
                   , subcategory
            ) x 
        GROUP 
           BY user_id
     ) a
  JOIN 
     ( SELECT @i:=0) vars
 ORDER
    BY total DESC;
SELECT a.*
     , @i:=@i+1 rank
  FROM 
     ( SELECT user_id
            , SUM(subtotal) total 
         FROM 
           ( SELECT user_id
                   , category
                   , subcategory
                   , MAX(score) subtotal 
                FROM my_table
                WHERE category = 'game'
                AND subcategory = '0'
               GROUP 
                  BY user_id
                   , category
                   , subcategory
            ) x 
        GROUP 
           BY user_id
     ) a
  JOIN 
     ( SELECT @i:=0) vars
 ORDER
    BY total DESC;
3按用户id分组的所有团队的排名仅针对特定子类别的游戏或测验的类别和子类别用户所有记录中所有最佳结果的总和

第0局预期结果

在哪里

600 = (600)
 600 is the best result of game 0, 

310 = (200 + 10 + 100) 
 200 is the best result of game 0, 
 10 is the best result of game 1, 
 100 is the best result of game 2,
3000 = (200 + 10 + 100) 
 2000 is the best result of quiz 0
 1000 is the best result of quiz 1

 0= (0)
(user_id= 2 don't play quiz)
600 = (600)
 600 is the best result of game 0, 

200 = (200 ) 
 200 is the best result of game 0, 
基于@草莓的解决方案谢谢

SELECT a.*
     , @i:=@i+1 rank
  FROM 
     ( SELECT user_id
            , SUM(subtotal) total 
         FROM 
           ( SELECT user_id
                   , category
                   , subcategory
                   , MAX(score) subtotal 
                FROM my_table 
               GROUP 
                  BY user_id
                   , category
                   , subcategory
            ) x 
        GROUP 
           BY user_id
     ) a
  JOIN 
     ( SELECT @i:=0) vars
 ORDER
    BY total DESC;
SELECT a.*
     , @i:=@i+1 rank
  FROM 
     ( SELECT user_id
            , SUM(subtotal) total 
         FROM 
           ( SELECT user_id
                   , category
                   , subcategory
                   , MAX(score) subtotal 
                FROM my_table
                WHERE category = 'game' // or 'quiz
               GROUP 
                  BY user_id
                   , category
                   , subcategory
            ) x 
        GROUP 
           BY user_id
     ) a
  JOIN 
     ( SELECT @i:=0) vars
 ORDER
    BY total DESC;
SELECT a.*
     , @i:=@i+1 rank
  FROM 
     ( SELECT user_id
            , SUM(subtotal) total 
         FROM 
           ( SELECT user_id
                   , category
                   , subcategory
                   , MAX(score) subtotal 
                FROM my_table
                WHERE category = 'game'
                AND subcategory = '0'
               GROUP 
                  BY user_id
                   , category
                   , subcategory
            ) x 
        GROUP 
           BY user_id
     ) a
  JOIN 
     ( SELECT @i:=0) vars
 ORDER
    BY total DESC;
4查询1获取单用户ex user_id=1的总分

5获取查询1的单个用户ex user_id=1的排名

6查询2获取单用户ex user_id=1的总分

7获取查询2的单个用户ex user_id=1的排名

8查询3获取单用户ex user_id=1的总分

9获取查询3的单个用户ex user_id=1的排名


谢谢大家!

这是第一个。用这个,向我们展示你在剩下的时间里所做的最大努力

SELECT a.*
     , @i:=@i+1 rank
  FROM 
     ( SELECT user_id
            , SUM(subtotal) total 
         FROM 
            ( SELECT user_id
                   , category
                   , subcategory
                   , MAX(score) subtotal 
                FROM my_table 
               GROUP 
                  BY user_id
                   , category
                   , subcategory
            ) x 
        GROUP 
           BY user_id
     ) a
  JOIN 
     ( SELECT @i:=0) vars
 ORDER
    BY total DESC;

请注意,此解决方案不考虑领带。

您已经尝试了所有这些,或者您只是想让某人为您编写?如前所述,我认为这个问题太广泛了。我建议你删除这个问题,再问另一个关于其中一个主题的问题。@pierregrander,我需要一个提示,我找到了一个解决方案来获得最佳价值,而不是sum@gordonlinoff我也这么认为,但也许一个查询可以关联到另一个查询。。。所以我决定把一切都分组。当然,非常感谢任何部分帮助:1根据用户id分组的所有团队的排名所有类别和子类别用户的所有记录之间的所有最佳结果的总和。这是不可理解的。它起作用了,谢谢!我只是编辑了获取点2和3的where条件