计算数据库排名的问题

qsoo 2004-09-15 05:14:42
现在有一个表如下
用户 积分 排名
a 108 ?
b 105 ?
c 110 ?

用户的积分不断的在变化,每过一个月的时候点击结算,就可以根据积分的高低来计算出用户的排名,然后将名次插入到用户对应的排名中,怎么实现?
...全文
161 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
hanbinghai 2004-09-18
  • 打赏
  • 举报
回复
建一个临时表 ,根据临时表的内容进行更新
数据表table1中有四个字段:id,a,b,c
id为自动id,a为成绩,b为姓名,c为排名
SELECT (SELECT COUNT(DISTINCT id)
FROM table1
WHERE a > hai.a) + 1 AS 排名,id
INTO #tableTemp
FROM table1 hai
ORDER BY 排名

go
UPDATE table1
SET c = #tableTemp.排名
from table1,#tableTemp
WHERE table1.id = #tableTemp.id
xiays 2004-09-16
  • 打赏
  • 举报
回复
错了一点,稍改一下
UPDATE hai
SET 排名字段=(SELECT COUNT(积分) FROM store WHERE 积分 > hai.积分) + 1
FROM store hai
Where store.用户=hai.用户
xiays 2004-09-16
  • 打赏
  • 举报
回复
hanbinghai(海宁) 的办法好,我补充一下
UPDATE store
SET 排名字段=(SELECT COUNT(积分) FROM store WHERE 积分 > hai.积分) + 1
FROM store hai

我没测试不过感觉上应该可以将排名更新到Store表中了

hanbinghai 2004-09-16
  • 打赏
  • 举报
回复
SELECT (SELECT COUNT(a)
FROM store
WHERE a > hai.a) + 1 AS 排名, a AS 积分, b AS 用户
FROM store hai
ORDER BY a DESC

排序如下
排名 积分 用户
1 4 NULL
2 3 NULL
3 2 NULL
3 2 NULL
5 1 NULL
5 1 NULL

hanbinghai 2004-09-16
  • 打赏
  • 举报
回复
hai 是数据表的别名
qsoo 2004-09-16
  • 打赏
  • 举报
回复
keer_yan(女魔法师)
SqlCommand mycomm = new SqlCommand("update 表名 set 排名='"+i+"'",conn);
这一句岂不是把所有的记录都修改了?
qsoo 2004-09-16
  • 打赏
  • 举报
回复
SELECT (SELECT COUNT(a)
FROM store
WHERE a > hai.a) AS 排名, a as 积分 , b as 用户
FROM store hai

???hai是什么意思?
libiyang 2004-09-15
  • 打赏
  • 举报
回复
还是做一个函数吧
muhan2008 2004-09-15
  • 打赏
  • 举报
回复
SELECT (SELECT COUNT(a)
FROM store
WHERE a > hai.a) AS 排名, a as 积分 , b as 用户
FROM store hai
对,程序就是要简单,艺术!!!!
secondfish 2004-09-15
  • 打赏
  • 举报
回复
月底结算的时候:先降序排列:select * from 表 order by 积分 desc


然后再:
update 表 set 排名=‘1’where name='c'
update 表 set 排名=‘2’where name='a'
update 表 set 排名=‘3’where name='b'



hanbinghai 2004-09-15
  • 打赏
  • 举报
回复
SELECT (SELECT COUNT(a)
FROM store
WHERE a > hai.a) AS 排名, a as 积分 , b as 用户
FROM store hai
参考看看
wurenxiaozu 2004-09-15
  • 打赏
  • 举报
回复
做一个函数,每月运行一次,这个函数就是用order by从数据库中取出数据,然后将该行的行号作为量修改他的排名不就行了。
keer_yan 2004-09-15
  • 打赏
  • 举报
回复
SqlConnection conn = Sqlconnection(这里你自已去写)
SqlCommand mycomm = new SqlCommand("select * from 表名 order by 积分 desc",conn);
SqlDataReader dr;
conn.open();
dr=mycomm.ExecuteReader();
while(dr.Read())
{
int i = 1;

SqlCommand mycomm = new SqlCommand("update 表名 set 排名='"+i+"'",conn);
conn.Close();
conn.Open();
int y = mycomm.ExecuteNonQuery();
if(y>0)
{
MessageBox.Show("修改成功");
}
i++;
conn.Close();

}
conn.Close();
jimh 2004-09-15
  • 打赏
  • 举报
回复
create table sort(
no int identity(1,1),
userid varchar(20))
insert into sort
select userid from usertable
order by score desc
hebookboy 2004-09-15
  • 打赏
  • 举报
回复
没有明白
secondfish 2004-09-15
  • 打赏
  • 举报
回复
1楼等待学习!!

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧