我有一组记录,例如
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查询(如果可能的话我想避免游标循环等)。 谢谢!
答案 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;