首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql -按两列分组的计算等级

Mysql -按两列分组的计算等级
EN

Stack Overflow用户
提问于 2017-09-22 08:05:47
回答 2查看 486关注 0票数 0

我有一个mysql表,如下所示:

代码语言:javascript
复制
          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分组的每个用户的级别(按更大的数量)。更具体地说,我希望产出如下:

代码语言:javascript
复制
[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

我尝试了以下几点:

代码语言:javascript
复制
 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的表

代码语言:javascript
复制
          Teams
[Username   Team]
  manos       T1 
  manos       T2
  maria       T1
  maria       T2
  nick        T1
  nick        T2
  aaron       T3

在这种情况下,我想提取组和类型的每个组合的等级,即对于Manos,我想:

  • 对A型T1患者的排名
  • 对A型T2患者的排名
  • 对B型T1患者的排名
  • 对B型T2患者的排名
  • T1和T2中A型人群的排名
  • T1和T2中B型人群的排名
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-22 08:46:11

为了理智,我重新命名了你的group专栏.

代码语言:javascript
复制
   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;
票数 1
EN

Stack Overflow用户

发布于 2017-09-22 08:24:14

正确代码:

代码语言:javascript
复制
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, Type
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46359811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档