文章主要介紹了MySQL實(shí)現(xiàn)多表關(guān)聯(lián)統(tǒng)計(jì)(子查詢統(tǒng)計(jì)),結(jié)合具體案例形式分析了mysql多表關(guān)聯(lián)統(tǒng)計(jì)的原理、實(shí)現(xiàn)方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下。
本文實(shí)例講述了mysql實(shí)現(xiàn)多表關(guān)聯(lián)統(tǒng)計(jì)的方法。分享給大家供大家參考,具體如下:
需求:
統(tǒng)計(jì)每本書(shū)打賞金額,不同時(shí)間的充值數(shù)據(jù)統(tǒng)計(jì),消費(fèi)統(tǒng)計(jì),
設(shè)計(jì)四個(gè)表,book 書(shū)本表,orders 訂單表 reward_log打賞表 consume_log 消費(fèi)表 ,通過(guò)book_id與book表關(guān)聯(lián),
問(wèn)題:
當(dāng)關(guān)聯(lián)超過(guò)兩張表時(shí)導(dǎo)致統(tǒng)計(jì)時(shí)數(shù)據(jù)重復(fù),只好用子查詢查出來(lái),子查詢只能查一個(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)隔開(kāi)
性能分析
- MySQL InnoDB數(shù)據(jù)庫(kù)如何保證事務(wù)特性示例詳解
- 數(shù)據(jù)庫(kù) MySQL8.0+常用命令及操作命令詳解
- Mysql8.0.17數(shù)據(jù)庫(kù)安裝圖文教程
- SQL Server 2000/2005/2008刪除或壓縮數(shù)據(jù)庫(kù)日志的方
- SQL Server數(shù)據(jù)庫(kù)查看login所授予的具體權(quán)限問(wèn)題
- SQL Server數(shù)據(jù)庫(kù)怎么找出一個(gè)表包含的頁(yè)信息(Page)
- Windows server 2016服務(wù)器上安裝oracle數(shù)據(jù)庫(kù)的教程
- SQL Server數(shù)據(jù)庫(kù)基礎(chǔ)之行數(shù)據(jù)轉(zhuǎn)換為列數(shù)據(jù)
- SQL server數(shù)據(jù)庫(kù)創(chuàng)建代碼 filegroup文件組修改的示例
- SQLServer數(shù)據(jù)庫(kù)處于恢復(fù)掛起狀態(tài)的解決辦法
分享到:
投訴收藏