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条件