背景
mysql經常會用到group By來進行分組查詢,但也經常會遇到一個問題,就是當有where條件時,被where條件過濾的數據不顯示了。
例如我有一組數據:
我想查詢創建時間大於某一範圍的spu的分組下的sku的數量
正常的sql查出的話,假如不存在相關記錄
SELECT product_id , count( *) count FROM product_sku WHERE create_time >= #{param} AND product_id in (1,2,3,4,5) GROUP BY product_id
結果查不到任何記錄
即使沒有數據,也想讓count顯示出0而不是空的效果
因此,我們想實現,即使沒有數據,也想讓count顯示出0而不是空的效果;
解決方案:構建一個包含所有productId的結果集;然後和我們本來的sql進行左外連接,在最外層利用ifnull函數
sql如下:
SELECT DISTINCT a.product_id uwci, IFNULL( b.count, 0) usedCount FROM product_sku a LEFT JOIN ( SELECT product_id , count( *) count FROM product_sku WHERE create_time >= #{param} AND product_id in (1,2,3,4,5) GROUP BY product_id ) AS b ON a.product_id = b.product_id
本篇文章如有幫助到您,請給「翎野君」點個贊,感謝您的支持。