在使用 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。