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

SQL条件聚合:如何基于流失总数计算分组流失占比

解决方案:按性别计算流失客户占总流失客户的比例

核心思路

你需要以总流失客户数为分母,计算每个性别流失客户数的占比。这里提供两种高效的实现方式:


方法1:使用窗口函数(推荐)

利用窗口函数SUM(COUNT(*)) OVER()直接获取所有流失客户的总数,无需额外子查询:

SELECT 
  Gender AS 性别,
  ROUND(COUNT(*) * 100.0 / SUM(COUNT(*)) OVER (), 1) || '%' AS 流失占比
FROM customer_churn
WHERE churn_value = 1
GROUP BY Gender;
  • 逻辑说明:
    1. WHERE churn_value = 1先过滤出所有流失客户
    2. GROUP BY Gender统计每个性别的流失客户数量
    3. SUM(COUNT(*)) OVER()计算所有分组的流失数总和(即总流失客户数1869)
    4. ROUND(...,1)保留1位小数,拼接%符号生成百分比格式

方法2:先计算总流失数(兼容老版本SQL)

如果你的数据库不支持窗口函数,可以先通过CTE或子查询算出总流失客户数,再关联计算:

WITH total_churn AS (
  SELECT COUNT(*) AS total FROM customer_churn WHERE churn_value = 1
)
SELECT 
  Gender AS 性别,
  ROUND(COUNT(*) * 100.0 / tc.total, 1) || '%' AS 流失占比
FROM customer_churn, total_churn tc
WHERE churn_value = 1
GROUP BY Gender, tc.total;
  • 逻辑说明:
    1. total_churn CTE先算出总流失客户数
    2. 主查询过滤流失客户后,关联总流失数计算占比

注意事项

  • 必须用100.0而非100,避免整数除法导致结果为0
  • 不同数据库的字符串拼接语法略有差异:
    • MySQL:用CONCAT(ROUND(...), '%')
    • SQL Server:用CAST(ROUND(...) AS VARCHAR) + '%'
    • PostgreSQL:用ROUND(...) || '%'(示例中使用的语法)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 10:05:02