我有一个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我想要创建一个视图,在这个视图中,与每个类型中的其他用户相比,我将拥有按Type分组的每个用户的级别(按更大的数量)。更具体地说,我希望产出如下:
[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结果是,我得到了Subquery returns more than 1 row错误。
任何帮助都将不胜感激!
编辑:按建议更改列的名称。还有一个要帮忙的小提琴: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,我想:
发布于 2017-09-22 08:46:11
为了理智,我重新命名了你的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;发布于 2017-09-22 08:24:14
正确代码:
select Username, (select Number
from Tbl as t
where t.Type = aw.Type and t.Username = aw.Username) as Rank, Type from Tbl as aw where
Number <= (
select Number
from Tbl as t
where t.Type = aw.Type and t.Username = aw.Username
) group by Username, Typehttps://stackoverflow.com/questions/46359811
复制相似问题