本文實例講述了mysql實現多表關聯統計的方法。分享給大家供大家參考,具體如下:
需求:
統計每本書打賞金額,不同時間的充值數據統計,消費統計,
設計四個表,book 書本表,orders 訂單表 reward_log打賞表 consume_log 消費表 ,通過book_id與book表關聯,
問題:
當關聯超過兩張表時導致統計時數據重復,只好用子查詢查出來,子查詢只能查一個字段,這里用CONCAT_WS函數將多個字段其拼接
實現:
查詢代碼如下
SELECTb.id,b.book_name,sum( IF ( o.create_time > 0 && o.create_time < 9999999999, o.price, 0 ) ) today_pay_money,sum( IF ( o.create_time > 0 && o.create_time < 9999999999, 1, 0 ) ) today_pay_num,sum( IF ( o.create_time > 999 && o.create_time < 9999, o.price, 0 ) ) yesterday_pay_money,sum( IF ( o.create_time > 999 && o.create_time < 9999, 1, 0 ) ) yesterday_pay_num,sum(o.price) total_pay_money,sum( IF ( o.create_time > 9999 && o.create_time < 99999, 1, 0 ) ) total_pay_num,( SELECT SUM( total_score ) FROM book_reward_log WHERE book_id = b.id ) total_score,( SELECT CONCAT_WS( ',', SUM( IF ( create_time > 0 && create_time < 998, score, 0 ) ), SUM( IF ( create_time > 9999 && create_time < 99998, score, 0 ) ), SUM( IF ( create_time > 99999 && create_time < 999998, score, 0 ) ) ) FROM book_consume_log WHERE book_id = b.id ) score FROM book_book b LEFT JOIN book_orders o ON b.id = o.bidGROUP BY b.id
查詢結果
score 為三個消費數,以逗號隔開
性能分析
更多關于MySQL相關內容感興趣的讀者可查看本站專題:《MySQL查詢技巧大全》、《MySQL常用函數大匯總》、《MySQL日志操作技巧大全》、《MySQL事務操作技巧匯總》、《MySQL存儲過程技巧大全》及《MySQL數據庫鎖相關技巧匯總》
希望本文所述對大家MySQL數據庫計有所幫助。
新聞熱點
疑難解答