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

如何在双重GROUP BY时排除满足多列条件的COUNT统计?

嘿,我懂你要对SAMPLE表按id的两个部分(01和02)做双重分组,还要统计符合特定条件的id数量的需求了!结合你提到的具体场景,我给你整理了一套可行的方案:

双重GROUP BY实现条件统计方案

首先得明确核心逻辑:我们需要先把id拆分成你说的01和02两个子部分,然后按这两个部分做分组,再针对id_laporan和id_laporan_rekomendasi的对应条件做统计。

核心步骤

  • 拆分id为01和02两个子部分(根据实际格式调整拆分方法)
  • 按01部分(或同时按01+02部分)执行GROUP BY
  • 使用条件聚合函数(CASE搭配COUNT/SUM)统计符合要求的记录数或数值总和

示例SQL(适配多数主流数据库)

SELECT
  -- 提取id的01部分:如果是固定长度前两位用LEFT,有分隔符用对应拆分函数
  LEFT(id, 2) AS id_part01,
  -- 可选:如果需要按02部分再做第二层分组,就加上这行
  -- RIGHT(id, 2) AS id_part02,
  
  -- 统计满足条件的记录数:对应你提到的id_laporan=3且rekomendasi=2,以及id_laporan=8的情况
  COUNT(CASE 
          WHEN (id_laporan = 3 AND id_laporan_rekomendasi = 2) 
               OR id_laporan = 8 THEN 1 
        END) AS qualified_record_count,
  
  -- 如果需要对某数值列求和(比如假设存在score列)
  SUM(CASE 
        WHEN (id_laporan = 3 AND id_laporan_rekomendasi = 2) 
             OR id_laporan = 8 THEN score 
        ELSE 0 
      END) AS qualified_total_score,
  
  -- 如果要统计**去重的id数量**(而非重复的记录数)
  COUNT(DISTINCT CASE 
                   WHEN (id_laporan = 3 AND id_laporan_rekomendasi = 2) 
                        OR id_laporan = 8 THEN id 
                 END) AS unique_qualified_id_count
FROM SAMPLE
-- 可选:如果只需要针对特定id_part01(比如你说的01部分)过滤
-- WHERE LEFT(id, 2) = '01'
-- 双重分组:如果要同时按01和02部分分组,就把GROUP BY改成下面这样
GROUP BY id_part01
-- GROUP BY id_part01, id_part02
ORDER BY id_part01;

针对你的场景调整细节

你提到id:01部分的id_laporan包含3和8,其中id_laporan=3对应id_laporan_rekomendasi=2——如果id_laporan=8时你有其他条件(比如对应某个特定的rekomendasi值),直接修改CASE里的判断逻辑就行:

  • 比如id_laporan=8时要求id_laporan_rekomendasi=5:
    CASE 
      WHEN (id_laporan = 3 AND id_laporan_rekomendasi = 2) 
           OR (id_laporan = 8 AND id_laporan_rekomendasi = 5) THEN 1 
    END
    
  • 如果id_laporan=8时只要存在就统计,保留原来的OR id_laporan = 8即可。

不同数据库的适配点

  • 字符串拆分函数:如果id是带分隔符的格式(比如01-001),替换成对应数据库的函数:
    • PostgreSQL:SPLIT_PART(id, '-', 1)(取分隔符前的第一部分)
    • MySQL:SUBSTRING_INDEX(id, '-', 1)
    • Oracle:SUBSTR(id, 1, INSTR(id, '-')-1)
  • 聚合函数:COUNT/SUM的逻辑在所有数据库里是通用的,不需要调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:18:10