MySQL聯結查詢和子查詢

weixin_34162629發表於2018-02-24

2018-2-24 16:18:12 星期六

今天需要統計一個運營活動的資料, 涉及三個表, 分組比較多

活動描述:

每個人可以領取多張卡片,  好友也可以贈送其卡片, 20或40張卡片可以兌換一個獎品

要求統計出:

1. 每個使用者的個人資訊, 2. 領取的卡總數, 3. 自己領的卡的數目, 4. 好友送的卡的數目, 5. 兌換獎品的數目

遇到的問題有:

1. 要先用group by 得到每個使用者總共的卡數量,  再用group by 得到每個使用者被贈送的卡數量, 然後對兩者做減法得到自己領取卡的數量 // 減法, 第1行

2. 每個使用者可以兌換多個獎品, 因此要把uid相同的多行獎品記錄連線成一行, 這個用到了 group by + group_concat()  //第4行

SQL:

下邊的SQL整體來看是幾個left join ,  而join的表不是表名, 是一個子查詢

1 select a.uid, c.nickname, c.mobile, a.uid_cards, (a.uid_cards - b.send_uids) as self_cards, b.send_uids, c.regdate, FROM_UNIXTIME(c.regdate, '%Y-%m-%d'), d.award_ids 
2 from (select uid, count(*) as uid_cards from tabale1 group by uid) as a
3 left join (select uid, count(*) as send_uids from tabale1 where send_uid > 0 group by uid) as b on a.uid = b.uid
4 left join (select uid, group_concat(award_id) as award_ids  from table2 group by uid) as d on a.uid = d.uid
5 left join table3 as c on a.uid = c.uid;

table1:  每個人的領取卡片記錄表

table2: 每個人的兌換獎品記錄列表

table3: 使用者資訊表

 

相關文章