MySQL 基础教程

MySQL 高级教程

MySQL SQL 语句

MySQL 笔记

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。