SQLite中如何为分组计数结果添加占比列?彩票数据场景
解决方案:添加分组占比百分比列
嘿,要给你的彩票开奖数据统计加上分组占比很简单,咱们分两种情况来实现,适配不同的SQLite版本:
方法一:子查询获取总数量(兼容所有SQLite版本)
这种方法兼容性拉满,不管你用的是哪个版本的SQLite都能跑。核心思路是先通过子查询算出表中所有数字的总数量,再用每组的数字个数除以总数得到百分比:
SELECT LAST_150, COUNT(LAST_150) AS count_numbers, -- 乘以100.0确保浮点运算,避免整数除法误差,ROUND保留2位小数可按需调整 ROUND((COUNT(LAST_150) * 100.0) / (SELECT COUNT(*) FROM CalculatedNumbers), 2) AS percentage FROM CalculatedNumbers GROUP BY LAST_150 ORDER BY count_numbers DESC;
方法二:窗口函数(SQLite 3.25+版本推荐)
如果你的SQLite版本在3.25及以上(支持窗口函数),用这个方法更简洁高效,不需要单独的子查询,直接通过SUM() OVER ()计算所有分组的总数:
SELECT LAST_150, COUNT(LAST_150) AS count_numbers, ROUND((COUNT(LAST_150) * 100.0) / SUM(COUNT(LAST_150)) OVER (), 2) AS percentage FROM CalculatedNumbers GROUP BY LAST_150 ORDER BY count_numbers DESC;
关键注意点
- 一定要用
100.0而不是100:SQLite默认会做整数除法,如果用100的话,小于总数1%的分组会直接得到0,100.0会把运算转为浮点型,得到正确的小数结果。 ROUND()的第二个参数可以调整:比如想要1位小数就写1,想要保留更多精度就写对应数字,去掉ROUND()的话会显示完整的浮点结果。
内容的提问来源于stack exchange,提问作者YoYoYo
相关产品推荐
相关产品推荐

