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

时间:2022-11-24 03:42:25
如题。在mysql数据库已有的表中新建一列,然后这一列的值为另外一已有数据的列的排名。
求高手sql如何写?

10 个解决方案

#1


新建一个表包括自增主键id

把你的表按照某列排序 insert到这个表   表的自增id即是排名

#2


举例说明要求

#3


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

#4


引用 2 楼 wwwwb 的回复:
举例说明要求


现在数据库有一表
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语句 在mysql数据库已有的表中新建一列,这一列的值为另外一已有数据的列的排名。 求高手sql如何写?。。。

谢谢!!!!!!

#5


引用 3 楼 mysdzlt2007 的回复:
不太明白SQL code?12345ALTER TABLE `表名` ADD COLUMN 新列名 类型; UPDATE `表名` a SET 新列名=(SELECT COUNT(*) FROM (SELECT 已有列名 FROM `表名` b) tmp WHERE tmp.已有列名>=a.已有列名);


看下面的回复。。

#6


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

#7


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

#8


引用 7 楼 WWWWA 的回复:
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



用上面的例子尝试成功了 在mysql数据库已有的表中新建一列,这一列的值为另外一已有数据的列的排名。 求高手sql如何写?

我可以加条件么:如果X的值小于15,那么Y的值为0;还有X列的值不唯一有重复。

谢谢!!!!

#9


如果X的值小于15,那么Y的值为0
SET a.y=if(a.x<15,0,c.pm)

还有X列的值不唯一有重复
重复怎么计算排名

#10


引用 9 楼 wwwwb 的回复:
如果X的值小于15,那么Y的值为0
SET a.y=if(a.x<15,0,c.pm)

还有X列的值不唯一有重复
重复怎么计算排名


如果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

谢谢!!!

#1


新建一个表包括自增主键id

把你的表按照某列排序 insert到这个表   表的自增id即是排名

#2


举例说明要求

#3


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

#4


引用 2 楼 wwwwb 的回复:
举例说明要求


现在数据库有一表
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语句 在mysql数据库已有的表中新建一列,这一列的值为另外一已有数据的列的排名。 求高手sql如何写?。。。

谢谢!!!!!!

#5


引用 3 楼 mysdzlt2007 的回复:
不太明白SQL code?12345ALTER TABLE `表名` ADD COLUMN 新列名 类型; UPDATE `表名` a SET 新列名=(SELECT COUNT(*) FROM (SELECT 已有列名 FROM `表名` b) tmp WHERE tmp.已有列名>=a.已有列名);


看下面的回复。。

#6


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

#7


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

#8


引用 7 楼 WWWWA 的回复:
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



用上面的例子尝试成功了 在mysql数据库已有的表中新建一列,这一列的值为另外一已有数据的列的排名。 求高手sql如何写?

我可以加条件么:如果X的值小于15,那么Y的值为0;还有X列的值不唯一有重复。

谢谢!!!!

#9


如果X的值小于15,那么Y的值为0
SET a.y=if(a.x<15,0,c.pm)

还有X列的值不唯一有重复
重复怎么计算排名

#10


引用 9 楼 wwwwb 的回复:
如果X的值小于15,那么Y的值为0
SET a.y=if(a.x<15,0,c.pm)

还有X列的值不唯一有重复
重复怎么计算排名


如果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

谢谢!!!