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

如何计算DISTINCT总数值占比?多选项统计场景下的占比计算方法

按独立用户维度计算症状占比的实现方案

统计逻辑说明

你需要的统计逻辑核心是把独立用户作为统计基准,而非单条记录,规则如下:

  • 分母:全量去重的总用户数,包含没有选择任何症状的用户
  • 分子:选择了对应症状的去重用户数,同一用户多次选择同一症状仅计数1次
  • 占比计算公式:(分子 / 分母) * 100%

代码实现示例

SQL 实现

假设你的表名为symptom_records,包含两个字段:person_id(用户唯一标识)、symptom(症状名称):

-- 统计所有症状对应的用户占比
SELECT
  symptom,
  -- 乘以100.0是为了避免整数除法截断结果
  COUNT(DISTINCT person_id) * 100.0 / (SELECT COUNT(DISTINCT person_id) FROM symptom_records) AS user_percentage
FROM symptom_records
-- 若不需要展示「无任何症状」的统计项,可打开下方注释
-- WHERE symptom != 'no symptoms'
GROUP BY symptom
ORDER BY user_percentage DESC;

如果仅需要查询单个症状(比如症状A)的占比,可直接加过滤条件:

SELECT
  COUNT(DISTINCT person_id) * 100.0 / (SELECT COUNT(DISTINCT person_id) FROM symptom_records) AS symptom_a_percentage
FROM symptom_records
WHERE symptom = 'symptom A';

Python Pandas 实现

import pandas as pd

# 示例数据构造
df = pd.DataFrame({
    'person_id': [1,1,2,2,2,3,4],
    'symptom': ['symptom A','symptom B','symptom B','symptom C','symptom D','no symptoms','symptom A']
})

# 计算全量独立用户总数
total_user_cnt = df['person_id'].nunique()

# 按症状分组统计独立用户占比
result = (df.groupby('symptom')['person_id'].nunique() / total_user_cnt * 100).round(2)
print(result)

运行后症状A的输出结果为50,符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:06:01