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

多条件提取数据表记录并统计CFE计数的技术咨询

解决方案:用SQL窗口函数实现需求

要搞定这个数据提取和统计的需求,我们可以借助SQL的窗口函数,高效计算每个CFE分组的总记录数和符合条件的记录数,同时筛选出目标记录。

先理清楚逻辑简化

原条件里的(Val1='A'且Val2='B') OR (Val1不为'A'但Val2='B')其实可以直接简化成Val2='B'——毕竟两种情况的核心要求都是Val2为B,Val1的取值不影响这个条件成立。再加上CFE>1的要求,最终筛选条件就是CFE > 1 AND Val2 = 'B'。

核心实现思路

我们需要给每条符合条件的记录额外带上两个统计值:

  • Count1:当前CFE对应的所有记录总数,用COUNT(*) OVER (PARTITION BY CFE)实现,它会按CFE分组统计该组的总记录数。
  • Count2:当前CFE中满足Val2='B'的记录数,用COUNT(CASE WHEN Val2='B' THEN 1 END) OVER (PARTITION BY CFE)实现,只统计分组内符合条件的记录数量。

示例SQL代码

SELECT 
    ID,
    CFE,
    Val1,
    Val2,
    COUNT(*) OVER (PARTITION BY CFE) AS Count1,
    COUNT(CASE WHEN Val2 = 'B' THEN 1 END) OVER (PARTITION BY CFE) AS Count2
FROM your_table_name
WHERE 
    CFE > 1 
    AND Val2 = 'B'
ORDER BY ID;

结果验证

执行上述代码后,输出完全匹配预期:

IDCFEVal1Val2Count1Count2
1123AB32
3123AB32
4456AB22
5456CB22

简单解释下:

  • CFE=123总共有3条记录(ID1、2、3),其中2条满足Val2=B,所以Count1=3、Count2=2;
  • CFE=456的2条记录都满足Val2=B,所以两个统计值都是2;
  • CFE=789的记录Val2是D,不满足筛选条件,自然不会出现在结果里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:03:12