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

如何基于aspirasi_id计算百分比?现有SQL结果错误求修正

修正后的SQL解决方案

我明白你的问题了——你现在的SQL是拿全表的总记录数来计算占比,所以所有选项的占比加起来才是100%,但你想要的是每个aspirasi_id分组内的选项占比总和为100%,而且不想用关联查询。

可以用窗口函数来实现这个需求,不用额外的关联查询,直接在查询里计算每个分组内的总记录数:

SELECT 
    aspirasi_id, 
    aspirasi_option_id, 
    (COUNT(aspirasi_option_id) * 100.0 / COUNT(*) OVER (PARTITION BY aspirasi_id)) AS total
FROM aspirasi_choices
GROUP BY aspirasi_id, aspirasi_option_id

关键修正点说明:

  • 替换了原来的全表计数子查询,改用COUNT(*) OVER (PARTITION BY aspirasi_id):这个窗口函数会为每条记录计算其所属aspirasi_id分组的总记录数,这样占比的计算就限定在当前分组内,而不是全表。
  • 调整了GROUP BY子句:必须同时按aspirasi_id和aspirasi_option_id分组,才能正确统计每个选项在对应aspirasi下的数量。
  • 用100.0代替100:保证除法是浮点运算,避免整数除法导致的结果截断(比如50%不会被计算成0)。

执行这个SQL后,结果会和你的期望一致:

  • aspirasi_id=52的分组只有一个选项,占比100%
  • aspirasi_id=53的分组有两个选项,各占50%

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:34:10