gpt4 book ai didi

Mysql - 计算按两列分组的排名

转载 作者:行者123 更新时间:2023-11-29 18:23:51 27 4
gpt4 key购买 nike

我有一个像这样的 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com