根据组枚举mysql中的行

时间:2015-06-07 14:04:34

标签: mysql

我有一组记录,例如

A   B
1   5
1   6
1   9
2   1
2   8

我们有两个组(A = 1和A = 2),内部组记录按B中的值排序。

我需要在每个组中添加一个带枚举的列

A   B   C
1   5   1
1   6   2
1   9   3
2   1   1
2   8   2

我尝试使用嵌套查询来获取一些记录,这些记录的B值小于当前记录的给定相同的组ID(A),但速度太慢。 我在代码的其他部分使用了一些枚举行(使用select @rownum:= @ rownum + 1 num),但我枚举了那里的所有记录。所以我感兴趣,是否有可能实现它的iside查询(如果可能的话我想避免游标循环等)。 谢谢!

2 个答案:

答案 0 :(得分:3)

最有效的方法是使用变量:

spinner.post(new Runnable() {
   public void run() {
      spinner.setOnItemSelectedListener(listener);
   }  
});

另一种方法使用相关子查询或连接,但假设select t.a, t.b, (@rn := if(t.a = @a, @rn + 1, if(t.a := @a, 1, 1) ) ) as c from table t cross join (select @a := '', @rn := 0) params order by t.a, t.b; 值对于每个a都是唯一的(或者表中有唯一的列):

b

答案 1 :(得分:2)

GL的第一种方法将是最快的,但这里还有其他一些想法,只是为了好玩...

1

SELECT x.*
     , COUNT(*) rank 
  FROM my_table x 
  JOIN my_table y 
    ON y.a = x.a 
   AND y.b <= x.b 
 GROUP  
    BY x.a
     , x.b;

2

SELECT x.* 
     , FIND_IN_SET(b,n) rank 
  FROM my_table x 
  JOIN 
     ( SELECT a 
            , GROUP_CONCAT(b ORDER BY b) n 
         FROM my_table 
        GROUP 
           BY a
     ) y 
    ON y.a = x.a;