先给出一些数据库表,方便大家直观感受。
当前需求:在后台展示 某俱乐部在某时间段的玩家个人信息以及消耗信息。
ClubInfo : 俱乐部
ClubID |
ClubName |
30005 |
小帅哥俱乐部 |
30100 |
GTT |
ClubUserInfo : 俱乐部-玩家,玩家可加入多个俱乐部。
ClubID |
UserID |
Level |
30005 |
1003 |
13 |
30005 |
1004 |
0 |
30005 |
1005 |
2 |
30100 |
1003 |
5 |
30100 |
1010 |
8 |
CostInfo : 玩家消耗,每次消耗单独记录。
ClubID |
UserID |
CostMoney |
Time |
30005 |
1003 |
20 |
2018-09-26 11:15:45 |
30005 |
1004 |
1 |
2018-03-07 11:00:00 |
30005 |
1003 |
101 |
2018-09-11 10:00:00 |
30005 |
1005 |
45 |
2018-09-05 10:02:20 |
30100 |
1003 |
23 |
2017-02-05 12:04:20 |
30100 |
1003 |
3 |
2018-09-05 11:14:10 |
30100 |
1010 |
70 |
2017-11-05 19:14:10 |
AccountsInfo : 玩家个人信息,全局统一
UserID |
NickName |
FaceUrl |
Age |
Sex |
1003 |
火烧风 |
t.cn/4afs45 |
28 |
1 |
1004 |
暖暖 |
t.cn/s655w5 |
23 |
0 |
1005 |
飞 |
t.cn/56sgz |
19 |
1 |
1010 |
蓝天白云 |
t.cn/y633 |
35 |
1 |
假如要查询俱乐部 30005 在 2018-09-01 到 2018-09-30 的信息,现在连表查询语句如下:
select A.*, B.CostMoney, C.NickName from ClubInfo as A
left join (
select UserID, sum(CostMoney) as Cost from CostInfo
where datediff( Time, '2018-09-01') >= 0 and datediff( Time, '2018-09-01') < 30
group by UserID
) as B on ( A.UserID = B.UserID)
join (
select UserID, NickName from AccountsInfo
) as C on ( A.UserID = C.UserID)
where A.ClubID = 30005 ;
结果如下:
ClubID |
UserID |
Level |
CostMoney |
NickName |
30005 |
1003 |
13 |
121 |
火烧风 |
30005 |
1004 |
0 |
|
暖暖 |
30005 |
1005 |
2 |
45 |
飞 |
可以看到 left join 允许右侧表空缺数据
网友评论