求高手sql如何写?
10 个解决方案
#1
新建一个表包括自增主键id
把你的表按照某列排序 insert到这个表 表的自增id即是排名
把你的表按照某列排序 insert到这个表 表的自增id即是排名
#2
举例说明要求
#3
不太明白
ALTER TABLE `表名` ADD COLUMN 新列名 类型;
UPDATE `表名` a SET 新列名=
(SELECT COUNT(*)
FROM (SELECT 已有列名 FROM `表名` b) tmp
WHERE tmp.已有列名>=a.已有列名);
#4
现在数据库有一表
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语句 。。。
谢谢!!!!!!
#5
看下面的回复。。
#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
(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
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
用上面的例子尝试成功了
我可以加条件么:如果X的值小于15,那么Y的值为0;还有X列的值不唯一有重复。
谢谢!!!!
#9
如果X的值小于15,那么Y的值为0
SET a.y=if(a.x<15,0,c.pm)
还有X列的值不唯一有重复
重复怎么计算排名
SET a.y=if(a.x<15,0,c.pm)
还有X列的值不唯一有重复
重复怎么计算排名
#10
如果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即是排名
把你的表按照某列排序 insert到这个表 表的自增id即是排名
#2
举例说明要求
#3
不太明白
ALTER TABLE `表名` ADD COLUMN 新列名 类型;
UPDATE `表名` a SET 新列名=
(SELECT COUNT(*)
FROM (SELECT 已有列名 FROM `表名` b) tmp
WHERE tmp.已有列名>=a.已有列名);
#4
现在数据库有一表
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语句 。。。
谢谢!!!!!!
#5
看下面的回复。。
#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
(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
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
用上面的例子尝试成功了
我可以加条件么:如果X的值小于15,那么Y的值为0;还有X列的值不唯一有重复。
谢谢!!!!
#9
如果X的值小于15,那么Y的值为0
SET a.y=if(a.x<15,0,c.pm)
还有X列的值不唯一有重复
重复怎么计算排名
SET a.y=if(a.x<15,0,c.pm)
还有X列的值不唯一有重复
重复怎么计算排名
#10
如果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
谢谢!!!