先給出一些資料庫表,方便大家直觀感受。
當前需求:在後臺展示 某俱樂部在某時間段的玩家個人資訊以及消耗資訊。
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 允許右側表空缺資料