前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >mysql中将where条件中过滤掉的group by分组后查询无数据的行进行补0

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

作者头像
翎野君
发布2024-04-10 08:04:36
发布2024-04-10 08:04:36
23000
代码可运行
举报
文章被收录于专栏:翎野君翎野君
运行总次数:0
代码可运行

背景

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

例如我有一组数据:

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

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

代码语言:javascript
代码运行次数:0
复制
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如下:

代码语言:javascript
代码运行次数:0
复制
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://cloud.tencent.com/developer/article/2406893

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-04-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 即使没有数据,也想让count显示出0而不是空的效果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档