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
本篇文章如有帮助到您,请给「翎野君」点个赞,感谢您的支持。
作者:翎野君
出处:http://www.cnblogs.com/lingyejun/
若本文如对您有帮助,不妨点击一下右下角的【推荐】。
如果您喜欢或希望看到更多我的文章,可扫描二维码关注我的微信公众号《翎野君》。
转载文章请务必保留出处和署名,否则保留追究法律责任的权利。
出处:http://www.cnblogs.com/lingyejun/
若本文如对您有帮助,不妨点击一下右下角的【推荐】。
如果您喜欢或希望看到更多我的文章,可扫描二维码关注我的微信公众号《翎野君》。
转载文章请务必保留出处和署名,否则保留追究法律责任的权利。