SQL语句 3个表连结排序输出问题

来源:百度知道 编辑:UC知道 时间:2024/06/27 07:48:50
现有 3个数据表 和其字段如下
date1 , userID name (记录会员数据)
date2 , ID roomID Changetime (记录游戏数据)
date3 , userID roomID ChangeMoney (记录游戏数据)

其中date2,date3 是同时写的 就是每记录一条date2的数据就会记录一条date3的数据 只是设计数据库的人把他分2个表来写了
userID字段是用户ID,name 是用户名字,roomID是房间序号,Changetime是游戏结束时间,ChangeMoney是游戏结束时用户改变的金币(赢是正数输是负数)

我现在想做个查询页 查询条件是 在一定的时间段内 用户在指定room内按获得的总金币的多少由多到少排列出来

比如date1数据如下
userID name
1 boy1
2 boy2
3 boy3

date2数据

ID roomID Changetime
1 10 2009-7-1 09:08:01
2 11 2009-7-2 09:09:01
3 11 2009-7-2 09:09:01
4 11 2009-7-2 09:09:01
5 11 2009-7-2 10:09:01
6 11 2009-7-2 10:09:01

date3数据

userID roomID ChangeMoney
1 10 200
2 11 100
3 11 -50
1 11 -50
2 11 -20
3 11

select a.name,sum(b.ChangeMoney) as money from date1 a left join date3 b on a.userID =b.userID left join date2 c on b.roomID=c.roomID where b.roomID=11 and c.Changetime between '2009-7-2 09:09:00 ' and '2009-7-2 11:00:00' group by a.name order by sum(b.ChangeMoney) desc

有个问题,表date2和表date3通过什么关联?

select row_number()over(order by 获得金币 desc) 排行,name 用户,获得金币 from(
select a.name,sum(c.ChangeMoney) 获得金币
from date1 a,date2 b,(select row_number()over(order by roomID) id,date3.* from date3) c
where a.userID = c.userID
and b.ID = c.ID
and b.roomID = c.roomID
and b.roomID = '11'
and b.Changetime between '2009-7-2 09:09:00' and '2009-7-2 11:00:00'
group by a.userID,a.name)tmp;

测试log:
[TEST@ORA1] SQL>select row_number()over(order by 获得金币 desc) 排行,name 用户,获得金币 from(
2 select a.name,sum(c.ChangeMoney) 获得金币
3 from date1 a,date2 b,(select row_number()o