首页 > 解决方案 > 按 SQL 分组的平均值

问题描述

我有命令:

SELECT
  number_of_pairs,
  COUNT(*) --/(SUM(COUNT)) AS Percentage
FROM result
WHERE number_of_pairs!= 'NULL'
GROUP BY 1;

结果是:

在此处输入图像描述

但我的目标不是知道每组的计数,而是每组计数相对于总数的百分比。我努力了:

COUNT(*)/(SUM(COUNT)) AS Percentage

但不返回任何东西。

我想进入379/(379+371)=0.505第一排和371/(379+371)=...第二排

SQLite 版本:3.11.0

标签: sqlsqlite

解决方案


您可以使用SUM()窗口函数来获取总数:

SELECT
  number_of_pairs,
  1.0 * COUNT(*) / SUM(COUNT(*)) OVER() AS Percentage
FROM result
WHERE number_of_pairs <> 'NULL'
GROUP BY number_of_pairs;

除非您实际上'NULL'在 column 中有字符串文字,否则number_of_pairs您必须将条件更改为:

number_of_pairs IS NOT NULL

对于不支持窗口函数的旧版本 SQLite:

SELECT
  r.number_of_pairs,
  1.0 * COUNT(*) / MAX(t.counter) AS Percentage
FROM result r 
CROSS JOIN (SELECT COUNT(*) counter FROM result WHERE number_of_pairs <> 'NULL') t
WHERE r.number_of_pairs <> 'NULL'
GROUP BY r.number_of_pairs;

查看简化的演示


推荐阅读