MySQL 基础教程

MySQL 高级教程

MySQL SQL 语句

MySQL 笔记

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/mysql-get-a-group-where-the-count-is-zero.html

mysql group by 分组查询后,如无条数数据的 id 对应记录补 0 的 sql 设计

MySQL 笔记 MySQL 笔记


在使用 mysql 进行 group by 分组查询后,分组的一些 id 对应的如条数 count 缺少数据时,通常不会有该条记录,为了一句 sql 搞定无数据时候补 0 的操作,如何设计?

推荐方式

以存在记录的 id 主表进行主查询,然后左连接(LEFT JOIN)该主表即可,待左连接的该表进行类似 count 的分组聚合查询操作,具体示例如下:

sql-> SELECT u.user_id, IFNULL(s.save_cnt, 0) AS save_cnt
      FROM tb_user u
      LEFT JOIN
      (
        SELECT
        us.user_id,
        COUNT(DISTINCT pd.post_id) AS save_cnt
        FROM tb_user_statistics us
        WHERE us.user_id IN (188, 2546183, 1861848)
        AND us.status = 1
        GROUP BY us.user_id
      ) s ON s.user_id = u.user_id
      WHERE u.user_id IN (188, 2546183, 1861848)

从上例可以看出,主表保证要查询的 user_id 都存在,左连接的统计表中,如果不存在 user_id 的相应记录,对应统计字段是 NULL,这是可以通过 IFNULL 函数来针对 NULL 值进行修正,改为 0。

SQL GROUP BY 语句将具有相同值的行分组,它通常和聚合函数(COUNT,MAX,MIN,SUM,AVG)等一起使用。 ...
SQL 中 WHERE 和 GROUP BY 的执行顺序如何? ...
在Django中,分组查询是指对数据库中的数据进行聚合操作,将具有相同特征的数据分组并进行计算。###使用annotate()和F()表达式 ...
Redis CLIENT ID 命令返回当前连接的 ID。 ...
假设你有一个名为`YourModel`的Django模型,并且想要通过主键id来查询:###使用`get()`方法请注意,如果没有找到符合条 ...