背景
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
标签:count,sku,product,group,分组,mysql,where,id From: https://www.cnblogs.com/lingyejun/p/18125129