mysql中将where条件中过滤掉的group by分组后查询无数据的行进行补0

背景

mysql经常会用到group By来进行分组查询,但也经常会遇到一个问题,就是当有where条件时,被where条件过滤的数据不显示了。

例如我有一组数据:

我想查询创建时间大于某一范围的spu的分组下的sku的数量

正常的sql查出的话,假如不存在相关记录

1
2
3
4
5
6
7
8
9
10
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如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
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

posted @   翎野君  阅读(92)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2018-04-09 qqwry.dat输出乱码问题及maven打包后资源文件大小不一致的问题
点击右上角即可分享
微信分享提示