这是一个非常简单的问题。它只有一张桌子! 我有一张书,每本书都有一个类别和一个数字。
SO I WANNA转换此
glmnet.basesurv
INTO THIS,
+--------------------------+
| book_id | category | num |
+--------------------------+
| 1 | a | 7 |
| 2 | a | 5 |
| 3 | a | 3 |
| 4 | b | 9 |
| 5 | b | 8 |
| 6 | b | 1 |
+--------------------------+
然后呢!
+--------------------------+
| book_id | category | num |
+--------------------------+
| 3 | a | 3 |
| 2 | a | 5 |
| 1 | a | 7 |
| 6 | b | 1 |
| 5 | b | 8 |
| 4 | b | 9 |
+--------------------------+
但是如何?!?!?!?!
创建表的脚本......
+--------------------------+
| book_id | category | num |
+--------------------------+
| 3 | a | 1 |
| 2 | a | 2 |
| 1 | a | 3 |
| 6 | b | 1 |
| 5 | b | 2 |
| 4 | b | 3 |
+--------------------------+
答案 0 :(得分:1)
您可以使用用户变量按增加ID的顺序生成每个类别中的序列号。
如果您只想查询表格,请使用:
select
b.id,
b.category,
@rn := if(@category = category, @rn + 1, if (@category := category, 1, 1)) num
from books b, (select @category := null, @rn := 0) t2
order by b.category, b.id
如果您想更新表格,请使用:
update books b1
join (
select
b.id,
@rn := if(@category = category, @rn + 1, if (@category := category, 1, 1)) num
from books b, (select @category := null, @rn := 0) t2
order by b.category, b.id
) b2 on b1.id = b2.id
set b1.num = b2.num;
根据已修改的问题,您可以改为使用order by b.category, b.num
。