mysql數據庫實現多表關聯統計、子查詢統計示例

2019-10-14 16:05:53 來源:互聯網作者:flysnownet 人氣: 次閱讀 501 條評論

文章主要介紹了mysql實現多表關聯統計(子查詢統計),結合具體案例形式分析了mysql多表關聯統計的原理、實現方法及相關操作注意事項,需要的朋友可以參考下。本文實例講述了my...

文章主要介紹了MySQL實現多表關聯統計(子查詢統計),結合具體案例形式分析了mysql多表關聯統計的原理、實現方法及相關操作注意事項,需要的朋友可以參考下。

本文實例講述了mysql實現多表關聯統計的方法。分享給大家供大家參考,具體如下:

需求:

統計每本書打賞金額,不同時間的充值數據統計,消費統計,

設計四個表,book 書本表,orders 訂單表  reward_log打賞表   consume_log 消費表 ,通過book_id與book表關聯,

問題:

當關聯超過兩張表時導致統計時數據重復,只好用子查詢查出來,子查詢只能查一個字段,這里用CONCAT_WS函數將多個字段其拼接

實現:

查詢代碼如下:

SELECT
b.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.bid
GROUP BY
 b.id

查詢結果

score 為三個消費數,以逗號隔開

性能分析

您可能感興趣的文章

相關文章