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

如何按name分组统计status=1的行数,将其他值及NULL计为0?

解决按name分组统计status=1行数并包含0值的问题

需求明确

按name分组,统计每组中status = 1的记录行数;对于status不等于1(包括0)或为NULL的情况,该组统计结果计为0,且所有出现过的name都必须出现在结果中。

你的问题分析

  1. WHERE过滤导致丢失分组:用WHERE status IS NULL OR status=1会直接过滤掉status=0的记录,像Juuso这种所有记录都是status=0的name,会因为没有符合WHERE条件的记录而被排除在分组结果外,不符合需求。
  2. CASE WHEN与聚合函数搭配错误:你写的CASE WHEN status IS NULL THEN 0 WHEN status=0 THEN 0 WHEN status=1 THEN COUNT(DISTINCT name)逻辑混乱——COUNT(DISTINCT name)在每个分组里结果都是1(因为已经按name分组),而且聚合函数不能嵌套在CASE WHEN的THEN分支里针对单条记录判断,应该是对每条记录生成1/0标记,再用SUM累加。

正确解决方案

核心是不提前过滤任何记录,按name分组后,用SUM()配合CASE WHEN统计符合条件的行数:

SELECT 
    name,
    SUM(CASE WHEN status = 1 THEN 1 ELSE 0 END) AS status_1_count
FROM students
GROUP BY name;

结果验证

基于你提供的测试数据,执行上述SQL会得到以下结果:

namestatus_1_count
Uolevi2
Maija4
Juuso0
Miiko0
  • Uolevi:有2条status=1的记录,统计正确
  • Maija:有4条status=1的记录,统计正确
  • Juuso:所有记录status=0,结果为0
  • Miiko:status为NULL,结果为0

完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 13:35:22