如题。在mysql数据库已有的表中新建一列,然后这一列的值为另外一已有数据的列的排名。
求高手sql如何写?

解决方案 »

  1.   

    新建一个表包括自增主键id把你的表按照某列排序 insert到这个表   表的自增id即是排名
      

  2.   

    不太明白ALTER TABLE `表名` ADD COLUMN 新列名 类型; 
    UPDATE `表名` a SET 新列名=
    (SELECT COUNT(*) 
    FROM (SELECT 已有列名 FROM `表名` b) tmp 
    WHERE tmp.已有列名>=a.已有列名);
      

  3.   


    现在数据库有一表
    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求sql语句谢谢!!!!!!
      

  4.   

    update 现在数据库有一表 a,
    (select b.id,count(*) as K from 现在数据库有一表 b,现在数据库有一表 c where b.X>=c.X) d
    set a.Y=d.K
    where a.id=b.id
      

  5.   

    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
      

  6.   

    用上面的例子尝试成功了我可以加条件么:如果X的值小于15,那么Y的值为0;还有X列的值不唯一有重复。谢谢!!!!
      

  7.   

    如果X的值小于15,那么Y的值为0
    SET a.y=if(a.x<15,0,c.pm)还有X列的值不唯一有重复
    重复怎么计算排名
      

  8.   


    如果X相同,那么插入时间早的排序在前。
    那就变成这样了,现在数据库有一表
    id   X    time
    1    20   2012-09-23 06:55:00 
    2    10   2012-09-23 07:45:02 
    3    30   2012-09-23 08:25:16
    4    20   2012-09-24 08:25:16
    新增加一列 Y
    id   X    time                   Y
    1    20   2012-09-23 06:55:00 
    2    10   2012-09-23 07:45:02 
    3    30   2012-09-23 08:25:16
    4    20   2012-09-24 08:25:16然后每行Y值为(X,time)组合排序的结果,如果X的值小于15,那么Y的值为0。
    (time为sysdate,这个值会唯一么?) 
    即结果为:
    id   X    time                   Y
    1    20   2012-09-23 06:55:00    1
    2    10   2012-09-23 07:45:02    0
    3    30   2012-09-23 08:25:16    3
    4    20   2012-09-24 08:25:16    2谢谢!!!