本文實(shí)例講述了mysql實(shí)現(xiàn)多表關(guān)聯(lián)統(tǒng)計(jì)的方法。分享給大家供大家參考,具體如下:
需求:
統(tǒng)計(jì)每本書打賞金額,不同時(shí)間的充值數(shù)據(jù)統(tǒng)計(jì),消費(fèi)統(tǒng)計(jì),
設(shè)計(jì)四個(gè)表,book 書本表,orders 訂單表 reward_log打賞表 consume_log 消費(fèi)表 ,通過book_id與book表關(guān)聯(lián),
問題:
當(dāng)關(guān)聯(lián)超過兩張表時(shí)導(dǎo)致統(tǒng)計(jì)時(shí)數(shù)據(jù)重復(fù),只好用子查詢查出來,子查詢只能查一個(gè)字段,這里用CONCAT_WS函數(shù)將多個(gè)字段其拼接
實(shí)現(xiàn):
查詢代碼如下
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
查詢結(jié)果
score 為三個(gè)消費(fèi)數(shù),以逗號(hào)隔開
性能分析
更多關(guān)于MySQL相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《MySQL查詢技巧大全》、《MySQL常用函數(shù)大匯總》、《MySQL日志操作技巧大全》、《MySQL事務(wù)操作技巧匯總》、《MySQL存儲(chǔ)過程技巧大全》及《MySQL數(shù)據(jù)庫鎖相關(guān)技巧匯總》
希望本文所述對(duì)大家MySQL數(shù)據(jù)庫計(jì)有所幫助。
標(biāo)簽:白銀 烏海 臨汾 湖北 湖南 武威 聊城 云浮
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《mysql實(shí)現(xiàn)多表關(guān)聯(lián)統(tǒng)計(jì)(子查詢統(tǒng)計(jì))示例》,本文關(guān)鍵詞 mysql,實(shí)現(xiàn),多表,關(guān)聯(lián),統(tǒng)計(jì),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。