如何计算分组查询中每行计数(*)之和的百分比SQL

如何计算分组查询中每行计数(*)之和的百分比SQL,sql,sqlite,count,sum,Sql,Sqlite,Count,Sum,我在一个在线学习网站的项目中遇到了问题。拥有如下所示的数据库: 我需要执行以下查询: 返回一个SQL查询字符串,该字符串将查找一个国家拥有的体育项目 在奥运会上获得奖牌。它应该包括奖牌的数量,别名为“计数”, 以及这项运动所代表的这个国家获胜的百分比, 别名为“百分比”。可选择按指定方向按给定字段排序 我已经解决了过滤部分。对于第一部分,考虑到一个国家“挪威”,我有: SELECT sport, count(*) as count FROM GOLDMEDAL WHERE COUNTRY

我在一个在线学习网站的项目中遇到了问题。拥有如下所示的数据库:

我需要执行以下查询:

返回一个SQL查询字符串,该字符串将查找一个国家拥有的体育项目 在奥运会上获得奖牌。它应该包括奖牌的数量,别名为“计数”, 以及这项运动所代表的这个国家获胜的百分比, 别名为“百分比”。可选择按指定方向按给定字段排序

我已经解决了过滤部分。对于第一部分,考虑到一个国家“挪威”,我有:

SELECT sport, count(*) as count 
FROM GOLDMEDAL 
WHERE COUNTRY = "Norway" GROUP BY SPORT
我不知道如何编码百分比部分。我知道我需要对每项运动的总行数求和,然后进行计算,但我在子查询方面遇到了麻烦。我试过一个,但不起作用:

SELECT SPORT, COUNT(*) as count, 
       (COUNT(*)*100)/(SELECT SUM(COUNT(*)) 
                       FROM GOLDMEDAL 
                       WHERE COUNTRY = "Norway" 
                       GROUP BY SPORT) 
FROM GOLDMEDAL 
WHERE COUNTRY = "Norway" 
GROUP BY SPORT;
编辑:解决了

SELECT SPORT, 
       COUNT(*), 
       COUNT(*)*100/(SELECT COUNT(*) 
                     FROM GOLDMEDAL 
                     WHERE COUNTRY = 'Norway') 
FROM GOLDMEDAL 
WHERE COUNTRY = 'Norway' 
GROUP BY SPORT;

我无法通过计算挪威所在的每一排来判断,它收回了该国在每一项运动中获得的所有奖牌。无论如何谢谢你

您可以使用下面的查询-

SELECT SPORT,
       COUNT(*) as count,
       (COUNT(*)*100)/(SELECT COUNT(*) FROM GOLDMEDAL) as percent
FROM GOLDMEDAL
WHERE COUNTRY = "Norway"
GROUP BY SPORT;

下面的查询将帮助您满足要求

select sport,count(*) as count,(count(*)*100)/(Select count(*) from goldmedal where 
country = "Norway") as percent 
from goldmedal where country = "Norway" group by sport;

最好的方法是使用窗口函数,而不是子查询:

SELECT sport, COUNT(*) as count,
       (COUNT(*) * 100.0 / SUM(COUNT(*)) OVER ()) as percent
FROM GOLDMEDAL 
WHERE COUNTRY = 'Norway'
GROUP BY SPORT
ORDER BY percent DESC;

嘿,安基特!如果我错了,请纠正我,但我认为子查询也需要为请求的国家过滤掉,如果不是,它将计算该国该项运动在每个国家赢得的每枚奖牌中所占的百分比。我发布了我得到的解决方案,非常感谢!