mysql给数据排序,更新rank值

SET @C = 0;SET @A = '';
UPDATE  `cifi_bi`.`rp_pr_my_monthly_report_m_sign` d
SET d.`rank` = 
(
    SELECT 
        CASE WHEN  d.`id` is not null
        THEN @C := @C + 1
    ELSE
         (@C := @C +1  AND @A := d.`PRA11`)
    END
)
 where 
 d.years = 2018
 AND d.months =     12
ORDER BY CASE PRA13 WHEN 0 THEN PRA13 ELSE PRA11/PRA13 END  desc;

 

case when条件可以用来做本行数据和上一行数据对比使用。这样可以实现一些特殊的排序需求,比如值相同的给相同的排序值。

MySQL中,如果你想给一张表中的未排序数据添加自增编号,你可以通过添加一个自增字段并使用一个辅助表来实现。以下是一个基本的步骤说明: 1. 选择或添加一个唯一标识字段,例如 `id`,然后为该字段设置自增属性。如果表中已经有了一个可以作为主键的字段,你可以直接使用它;如果没有,你需要创建一个新的字段。 ```sql ALTER TABLE your_table_name ADD COLUMN id INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST; ``` 2. 如果表中已经存在数据,这些数据将自动获得 `id` 的。如果表是空的,那么第一条插入的记录将获得编号1。 3. 如果你需要更新现有的记录,使它们获得一个连续的编号(这在已存在的记录中 `id` 字段没有被使用的情况下尤其有用),你可以通过以下步骤实现: - 创建一个临时的辅助表来存储当前的记录和编号。 - 在辅助表中插入数据,每个记录都关联一个编号。 - 删除原表中的数据。 - 将辅助表中的数据重新插入到原表中。 这个过程比较复杂,因为涉及到数据迁移,所以需要谨慎操作,并确保在操作之前备份好数据。以下是一个简化的示例: ```sql -- 创建辅助表 CREATE TABLE temp_table LIKE your_table_name; -- 创建一个变量来存储编号,从1开始 SET @rank = 0; -- 将数据按照某个字段排序并插入到辅助表中,同时分配编号 INSERT INTO temp_table (field1, field2, ..., rank) SELECT field1, field2, ..., @rank := @rank + 1 AS rank FROM your_table_name ORDER BY some_field; -- 删除原表数据 DELETE FROM your_table_name; -- 将数据从辅助表重新插入到原表 INSERT INTO your_table_name (field1, field2, ..., id) SELECT field1, field2, ..., rank FROM temp_table; -- 删除辅助表 DROP TABLE temp_table; -- 重置自增ID计数器(如果需要) ALTER TABLE your_table_name AUTO_INCREMENT = 1; ``` 请注意,上述步骤是一个概念性的示例,具体实现时需要根据你的表结构和数据特点进行调整。特别是在涉及到大量数据迁移时,必须谨慎操作,最好在测试环境中先行验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值