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

如何在SQL中计算分组百分比(SQLite示例)

问题描述

现有SQLite数据库表results,包含team和result两列,存储球队'A'和'B'的比赛结果('W'代表获胜,'L'代表失利),数据如下:

team|result
A   |W
A   |W
A   |W
A   |L
B   |W
B   |W
B   |L
B   |L

目前可以通过分组查询统计每支球队的胜负次数:

sqlite> select team,result,count(*) from results group by team,result;

查询结果:

A|L|1
A|W|3
B|L|2
B|W|2

希望在查询结果中额外添加胜负占比(以百分比形式呈现),期望输出如下:

A|L|1|25
A|W|3|75
B|L|2|50
B|W|2|50

当前通过Python程序调用SQLite API查询后循环计算实现,想知道能否直接用SQL完成该需求?

解决方案

可以直接用SQL实现,利用SQLite的窗口函数(需SQLite 3.25.0及以上版本支持)来获取每支球队的总比赛场次,再计算占比:

SELECT 
    team,
    result,
    COUNT(*) AS count,
    ROUND(COUNT(*) * 100.0 / COUNT(*) OVER (PARTITION BY team)) AS percentage
FROM results
GROUP BY team, result;

说明:

  • COUNT(*) OVER (PARTITION BY team):窗口函数,按team分组计算每个球队的总比赛次数,无需额外子查询。
  • COUNT(*) * 100.0 / ...:将胜负次数除以总场次后乘以100,得到百分比(用100.0确保浮点运算,避免整数除法导致的精度丢失)。
  • ROUND():对计算结果取整,匹配期望的整数百分比格式。

执行上述SQL后,即可直接得到包含胜负占比的结果集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 10:25:34