sql - 按 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
解决方案
您可以使用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;
查看简化的演示。
推荐阅读
- django - 如何将 {% static %} 应用于我的 django 项目中的所有静态文件,或者让 django 浏览我的所有文件?
- r - 使用 GGPLOT 在 Y 轴上未正确映射值
- validation - 验证器不适用于 AdonisJS 中的资源路由
- php - Xdebug跟踪功能如何排除供应商目录
- javascript - 在 Javascript 中返回一个不断变化的密钥形式 JSON
- java - 使用 Java + JDBC 在 SQLServer 中出现死锁,但在 SSMS 中执行相同命令时不会出现死锁
- c# - 如何使用 WebView 导航到本地/Intranet 位置?
- db2 - 无法在 IBM 免费帐户上创建 Db2 服务
- c++ - CMake 问题:找不到 Visual Studio 的任何实例
- c# - Unity C# 中的 NullReference 问题