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: 使用者資訊表