MySQL group by和left join并用解決方式
MySQL group by和left join并用
最近在做一個(gè)聯(lián)查時(shí)遇到了一個(gè)問題,group by和left join并用的時(shí)候,發(fā)現(xiàn)記錄沒法查出來,原因其實(shí)
是自己的sql寫得不太好,在同事幫助下得到了解決,下面上SQL
account_log為記錄表customer為用戶表
沒解決前的sql
SELECT customer.Alias,SUM(account_log.money) AS money,account_log.cid AS cid FROM `customer` LEFT JOIN account_log ON account_log.cid = customer.id WHERE customer.Alias = '123' GROUP BY customer.Alias;
上面的這種寫法主要是想通過聯(lián)查然后統(tǒng)計(jì)出記錄表用戶所有的money字段,但是如果在記錄表沒有記錄的情況下,group by查出來的結(jié)果會(huì)為空,這樣就導(dǎo)致了用戶數(shù)據(jù)也顯示不出來了。
重寫sql如下
SELECT * FROM `customer` c LEFT JOIN `(SELECT cid,SUM(money) AS money FROM account_log GROUP BY cid ) m` ON c.id = m.cid WHERE c.Alias = '123'
居然還有這種操作,left join里面居然還能用子查詢,money的統(tǒng)計(jì)也能獲取到,棒!
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL中Next-Key Lock底層原理實(shí)現(xiàn)
Next-KeyLock是MySQL InnoDB存儲(chǔ)引擎中的一種鎖機(jī)制,結(jié)合記錄鎖和間隙鎖,用于高效并發(fā)控制并避免幻讀,本文主要介紹了MySQL中Next-Key Lock底層原理實(shí)現(xiàn),感興趣的可以了解一下2025-03-03
Mysql中LAST_INSERT_ID()的函數(shù)使用詳解
MYSQL中varchar和TEXT的相關(guān)問題詳析
mysql?in索引慢查詢優(yōu)化實(shí)現(xiàn)步驟解析

