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

按月份统计符合条件行数:SQL查询结果不符合预期求助

解决按月份统计特定条件行数的问题

嘿,我来帮你搞定这个统计问题~你的SQL语句之所以只返回全表总数,核心问题是子查询没有和外层的月份做关联,每个子查询都在计算全表符合条件的行数,而非对应月份的数据。咱们换用CASE表达式配合聚合函数的方式,就能精准实现按月份统计每个字段的符合条件行数啦。

正确的SQL语句

SELECT 
    MONTHNAME(tanggal) as bulan,
    COUNT(CASE WHEN iad != '-' THEN 1 END) as iadp,
    COUNT(CASE WHEN isk != '-' THEN 1 END) as isk,
    COUNT(CASE WHEN vap != '-' THEN 1 END) as vap,
    COUNT(CASE WHEN hap != '-' THEN 1 END) as hap,
    COUNT(CASE WHEN plebitis != 'tidak' THEN 1 END) as plebitis
FROM triwulan
GROUP BY bulan, MONTH(tanggal) -- 避免不同年份的同月份被合并统计
ORDER BY MONTH(tanggal);

写法说明

  • CASE WHEN 条件 THEN 1 END:当字段满足条件时返回1,否则返回NULL。而COUNT()函数会自动忽略NULL值,最终统计的就是当月符合该条件的行数。
  • 把MONTH(tanggal)加入GROUP BY是为了严谨性——如果你的数据跨年份,这样能避免2023年1月和2024年1月被合并成同一行;如果数据仅单一年份,这部分可以省略。
  • ORDER BY MONTH(tanggal)能让结果按月份顺序排列,看起来更直观。

另外,你也可以用SUM()代替COUNT(),写法逻辑一致,效果相同:

SELECT 
    MONTHNAME(tanggal) as bulan,
    SUM(CASE WHEN iad != '-' THEN 1 ELSE 0 END) as iadp,
    SUM(CASE WHEN isk != '-' THEN 1 ELSE 0 END) as isk,
    SUM(CASE WHEN vap != '-' THEN 1 ELSE 0 END) as vap,
    SUM(CASE WHEN hap != '-' THEN 1 ELSE 0 END) as hap,
    SUM(CASE WHEN plebitis != 'tidak' THEN 1 ELSE 0 END) as plebitis
FROM triwulan
GROUP BY bulan, MONTH(tanggal)
ORDER BY MONTH(tanggal);

选你觉得顺手的写法就好~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:28:09