我有一个像这样的 mysql 表:
Tbl
[Username Number Type]
manos 5 A
manos 6 B
maria 2 A
maria 3 B
maria 1 C
nick 7 A
nick 4 C
aaron 8 A
我想创建一个 View ,其中将显示每个用户的排名(按较大的数字),按类型
分组,并与每种类型中的其他用户进行比较。更具体地说,我希望输出为:
[Username Rank Type]
manos 3 A
manos 1 B
maria 4 A
maria 2 B
maria 2 C
nick 2 A
nick 1 C
aaron 1 A
我尝试过以下方法:
select Username, count(*) as Rank, Type
from Tbl as aw
where
Number <= (
select Number
from Tbl
where Type = aw.Type
)
group by Username, Type
结果是我收到子查询返回超过 1 行
错误。
如有任何帮助,我们将不胜感激!
编辑:按照建议更改列名称。还有一个 fiddle 来帮助:http://sqlfiddle.com/#!9/55ec3f
编辑2:对“所有组合排名”的一些澄清和更正。
假设我们有另一个名为 Teams
的表:
Teams
[Username Team]
manos T1
manos T2
maria T1
maria T2
nick T1
nick T2
aaron T3
在这种情况下,我想提取组和类型的每个组合的排名,即对于 Manos,我想要:
- 与 T1 类型 A 的人进行排名
- 与 T2 类型 A 的人进行排名
- 与 T1 中 B 型人的排名
- 与 T2 中 B 型人的排名
- 与 T1 和 T2 中 A 类型的人进行排名
- 与 T1 和 T2 中 B 型人员的排名
最佳答案
为了保持理智,我重命名了您的group
列...
SELECT username
, user_group
, number
, CASE WHEN @prev=user_group THEN @i:=@i+1 ELSE @i:=1 END rank
, @prev:=user_group
FROM my_table x
, (SELECT @prev:=null, @i:=0) vars
ORDER
BY user_group
, number DESC;
关于Mysql - 计算按两列分组的排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46359811/