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

按ID分组统计Topic数量:存在A时同步计数对应B的实现方法

实现逻辑

核心规则非常简单:仅统计存在Topic为A的ID下,Topic为A或B的记录数即可,完全匹配你的需求。

通用SQL实现(兼容MySQL/PostgreSQL等主流数据库)

SELECT 
  ID,
  COUNT(*) AS 计数
FROM 
  你的表名
WHERE 
  -- 限定仅统计包含A的ID
  ID IN (SELECT DISTINCT ID FROM 你的表名 WHERE Topic = 'A')
  -- 仅统计A、B两类Topic的记录
  AND Topic IN ('A', 'B')
GROUP BY ID
ORDER BY ID;

运行结果

和你给出的预期完全一致:

ID计数
12
42
51

窗口函数版本(适合支持CTE的高版本数据库)

如果你用的数据库支持公共表达式,也可以用这种写法,大数据量下性能更优:

WITH id_mark AS (
  SELECT
    ID,
    Topic,
    -- 给每个ID打标记:是否存在A
    MAX(CASE WHEN Topic = 'A' THEN 1 ELSE 0 END) OVER (PARTITION BY ID) AS has_a
  FROM 你的表名
)
SELECT
  ID,
  COUNT(*) AS 计数
FROM id_mark
WHERE has_a = 1 AND Topic IN ('A', 'B')
GROUP BY ID
ORDER BY ID;

Python Pandas 实现(针对本地数据表处理)

如果你是用Python处理结构化数据,可以用这个方案:

import pandas as pd

# 替换为你自己的数据表导入逻辑
df = pd.DataFrame({
    'ID': [1,1,2,3,4,4,5],
    'Topic': ['A','B','B','C','A','B','A']
})

# 筛选目标ID + 统计
ids_with_a = df[df['Topic'] == 'A']['ID'].unique()
result = df[(df['ID'].isin(ids_with_a)) & (df['Topic'].isin(['A','B']))]\
         .groupby('ID', as_index=False).size().rename(columns={'size':'计数'})

print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:15:04