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

如何将含COUNT(*) OVER()的SQL语句转换为Python实现?

Python(Pandas)实现SQL窗口函数COUNT(*) OVER()的需求

核心思路

原SQL逻辑是先按userID分组统计每个用户的记录数Ct,再通过窗口函数COUNT(*) OVER()获取分组后的总用户数(即分组结果的总行数),并将该数值附加到每一行。用Pandas可以分两步实现:

  • 第一步:按userID分组,统计每个用户的记录数得到Ct
  • 第二步:计算分组结果的总行数,将其作为固定值赋给所有行的Total_Ct列

代码实现

先模拟原CTE的数据源(假设原数据包含重复的userID条目):

import pandas as pd

# 模拟原cte中的数据
data = {
    'userID': ['A1', 'A1', 'A1', 'A1', 'A1',
               'A2', 'A2', 'A2',
               'A3',
               'A4', 'A4',
               'A5', 'A5', 'A5', 'A5', 'A5',
               'A6', 'A6', 'A6', 'A6', 'A6', 'A6',
               'A7', 'A7', 'A7', 'A7']
}
cte = pd.DataFrame(data)

接着执行分组统计和添加总用户数:

# 第一步:分组统计每个userID的Ct
result = cte.groupby('userID').size().reset_index(name='Ct')

# 第二步:给所有行添加Total_Ct,值为分组结果的总行数(总用户数)
result['Total_Ct'] = len(result)

# 打印结果
print(result)

输出结果

运行代码后会得到与预期一致的输出:

userID  Ct  Total_Ct
0     A1   5         7
1     A2   3         7
2     A3   1         7
3     A4   2         7
4     A5   5         7
5     A6   6         7
6     A7   4         7

扩展:计算用户占比

如果需要计算每个用户的记录数占比Ct/Total_Ct,直接新增列即可:

result['Ratio'] = result['Ct'] / result['Total_Ct']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 07:15:42