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

如何用MySQL统计各问题的选项选中占比(百分比形式)

MySQL统计问题各选项选中占比的SQL实现

表结构与示例数据

假设你的表名为question_selections,表结构及数据如下:

Question_IdSelected_Option
65Option A
101Option B
65Option C

实现思路

要计算每个问题下各选项的选中占比,核心是先获取每个问题的总选择次数,再计算单个选项在该问题下的选择次数,最后用「选项次数/总次数」得到占比并格式化为百分比。

SQL语句(MySQL 8.0+ 推荐)

使用窗口函数OVER (PARTITION BY Question_Id)可以高效获取每个问题的总选择数,无需额外子查询关联:

SELECT
    Question_Id,
    Selected_Option,
    CONCAT(
        ROUND(
            (COUNT(*) * 100) / COUNT(*) OVER (PARTITION BY Question_Id),
            0
        ),
        '%'
    ) AS Selection_Percentage
FROM question_selections
GROUP BY Question_Id, Selected_Option
ORDER BY Question_Id;

语句说明

  1. GROUP BY Question_Id, Selected_Option:按问题和选项分组,统计每个选项的选中次数
  2. COUNT(*) OVER (PARTITION BY Question_Id):窗口函数,计算当前问题的总选择次数
  3. ROUND(..., 0):将占比保留整数位,若需要小数可调整第二个参数(比如保留1位小数写ROUND(...,1))
  4. CONCAT(..., '%'):将数值转为带百分号的字符串格式

执行结果

Question_IdSelected_OptionSelection_Percentage
65Option A50%
65Option C50%
101Option B100%

兼容MySQL 5.x版本的写法

如果你的MySQL版本不支持窗口函数,可以用子查询先统计每个问题的总次数,再关联计算:

SELECT
    qs.Question_Id,
    qs.Selected_Option,
    CONCAT(
        ROUND(
            (COUNT(qs.Selected_Option) * 100) / qt.Total_Count,
            0
        ),
        '%'
    ) AS Selection_Percentage
FROM question_selections qs
JOIN (
    SELECT Question_Id, COUNT(*) AS Total_Count
    FROM question_selections
    GROUP BY Question_Id
) qt ON qs.Question_Id = qt.Question_Id
GROUP BY qs.Question_Id, qs.Selected_Option
ORDER BY qs.Question_Id;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:09:24