我有一组记录,例如
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),但我枚举了那里的所有记录。所以我很感兴趣,是否可以在查询中实现它(如果可能的话,我想避免游标循环等)。
谢谢!
在 MySQL 8 中引入公用表表达式之前,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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)