SQL分组平均数

问题描述 投票:0回答:1

我有命令:

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

结果为:

enter image description here

但是我的目标不是知道每个组的数量,而是每个组相对于总数的百分比。我尝试过:

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

但不返回任何内容。

我想在第一行中获得379/(379+371)=0.505,在第二行中获得371/(379+371)=...

SQLite版本:3.11.0

sql sqlite
1个回答
0
投票

您可以使用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'中实际上有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;

请参阅简化的demo

© www.soinside.com 2019 - 2024. All rights reserved.