mysql中將where條件中過濾掉的group by分組後查詢無數據的行進行補0

背景

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

 

本篇文章如有幫助到您,請給「翎野君」點個贊,感謝您的支持。

首發鏈接:https://www.cnblogs.com/lingyejun/p/18125129

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章