mysql一列值排序后的序列号更新到另一列内

现在数据库有一表
id   X
1    20
2    10
3    30
新增加一列Y
id     X      Y
1      20
2      10   
3       30


然后每行Y值为X值在X列排序的结果
即结果为:
id     X       Y
1      20     2
2      10     1

3       30     3


方法:
UPDATE test a INNER JOIN (
SELECT a.x ,COUNT(*) AS pm FROM `test` a LEFT JOIN  `test` b ON a.`x`>=b.`x`
GROUP BY a.`x`) c
ON a.`x`=c.x

SET a.y=c.pm


如果是按降序排列则

SELECT a.x ,COUNT(*) AS pm FROM `test` a LEFT JOIN  `test` b ON a.`x`>=b.`x`  改为

SELECT a.x ,COUNT(*) AS pm FROM `test` a LEFT JOIN  `test` b ON a.`x`<=b.`x`






~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

UPDATE link a INNER JOIN (
SELECT a.link_viewCount ,COUNT(*) AS pm FROM `link` a LEFT JOIN  `link` b ON a.`link_viewCount`<=b.`link_viewCount` 
where a.link_viewCount>100
GROUP BY a.`link_id`) c
ON a.`link_viewCount`=c.link_viewCount
SET a.link_rank=c.pm

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

临时添加一列 用来表示另一列的排序值

select   (@i:=@i+1)   as   i,l.* 
from   link l,(select   @i:=0)   as   it 
order by l.link_count1+l.link_count2+l.link_count3+l.link_count4+l.link_count5+l.link_count6+l.link_count7 desc





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值