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

求助:统计CURRENTLY ENROLLED表各类别人数及占比的SQL查询

解决方案:统计各类别数量及占比的SQL查询

方法一:单查询实现汇总统计与占比计算

可以通过CASE表达式结合基础聚合函数,一次性完成各类别数量、占比和总人数的统计,无需多次执行查询:

SELECT
  COUNT(CASE WHEN `status` = 'Supporter' THEN 1 END) AS SUPPORTERS,
  ROUND(COUNT(CASE WHEN `status` = 'Supporter' THEN 1 END) * 100.0 / COUNT(*), 2) AS SUPPORTERS_PERCENT,
  COUNT(CASE WHEN `value` = 'Opposition' THEN 1 END) AS OPPOSITION,
  ROUND(COUNT(CASE WHEN `value` = 'Opposition' THEN 1 END) * 100.0 / COUNT(*), 2) AS OPPOSITION_PERCENT,
  COUNT(CASE WHEN `value` = 'Undecided' THEN 1 END) AS UNDECIDED,
  ROUND(COUNT(CASE WHEN `value` = 'Undecided' THEN 1 END) * 100.0 / COUNT(*), 2) AS UNDECIDED_PERCENT,
  COUNT(*) AS TOTAL
FROM `CURRENTLY ENROLLED`;

说明:

  • COUNT(*)自动计算总人数,无需手动输入固定值,避免数据更新后数值脱节
  • 乘以100.0是为了规避整数除法问题(比如13/29若用整数计算会得到0,转成浮点数才能得到正确的小数结果)
  • ROUND(..., 2)用于将百分比保留两位小数,可根据需求调整保留位数

方法二:按类别行展示结果(分组视图)

如果希望每个类别单独占一行展示,更清晰直观,可使用UNION ALL结合子查询:

WITH total AS (
  SELECT COUNT(*) AS total_count FROM `CURRENTLY ENROLLED`
)
SELECT
  'Supporter' AS CATEGORY,
  COUNT(*) AS COUNT,
  ROUND(COUNT(*) * 100.0 / (SELECT total_count FROM total), 2) AS PERCENTAGE
FROM `CURRENTLY ENROLLED`
WHERE `status` = 'Supporter'
UNION ALL
SELECT
  'Opposition' AS CATEGORY,
  COUNT(*) AS COUNT,
  ROUND(COUNT(*) * 100.0 / (SELECT total_count FROM total), 2) AS PERCENTAGE
FROM `CURRENTLY ENROLLED`
WHERE `value` = 'Opposition'
UNION ALL
SELECT
  'Undecided' AS CATEGORY,
  COUNT(*) AS COUNT,
  ROUND(COUNT(*) * 100.0 / (SELECT total_count FROM total), 2) AS PERCENTAGE
FROM `CURRENTLY ENROLLED`
WHERE `value` = 'Undecided';

重要提示

你之前的查询中,支持者用status字段,反对者和未决者用value字段,这大概率是笔误。请务必确认表结构,确保统计字段统一(比如是否都是status或value),否则会导致统计结果失真。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:45:46