You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL查询中显示包含值为0的所有结果

解决SQL分组查询中缺失值显示为0的问题

原执行的SQL语句:

Select books AS books_read, Count(*) as page_count
FROM books_rollup
WHERE books IN ('Value 1', 'Value 2', 'Value 3')
Group By books

查询结果仅返回Value 1和Value 3的统计数据,Value 2因在books_rollup表中无匹配数据,对应的page_count为0却未被展示。要让所有指定值都出现在结果中,可通过以下方式修改查询:

通用解决方案(适配多数数据库)

SELECT 
    t.books AS Books_Read,
    COUNT(b.books) AS Page_Count
FROM 
    (SELECT 'Value 1' AS books UNION ALL
     SELECT 'Value 2' AS books UNION ALL
     SELECT 'Value 3' AS books) t
LEFT JOIN 
    books_rollup b ON t.books = b.books
GROUP BY 
    t.books

简化写法(支持VALUES子句的数据库:MySQL 8.0+、PostgreSQL、SQL Server等)

SELECT 
    t.books AS Books_Read,
    COUNT(b.books) AS Page_Count
FROM 
    (VALUES ('Value 1'), ('Value 2'), ('Value 3')) AS t(books)
LEFT JOIN 
    books_rollup b ON t.books = b.books
GROUP BY 
    t.books

关键逻辑说明

  1. 先构造包含所有目标书籍值的临时数据集t,确保需要展示的每个值都有一条基础记录
  2. 使用**左连接(LEFT JOIN)**关联原表books_rollup:左连接会保留临时表的所有记录,即使原表中没有对应匹配的数据
  3. 用COUNT(b.books)替代原查询的COUNT(*):当原表无匹配数据时,b.books会返回NULL,COUNT函数会忽略NULL值,最终统计结果为0;若使用COUNT(*),会把左连接生成的NULL行统计为1,无法得到预期的0值

内容的提问来源于stack exchange,提问作者Knowledge

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 18:01:24