如何计算分组查询中每行计数(*)之和的百分比SQL
我在一个在线学习网站的项目中遇到了问题。拥有如下所示的数据库: 我需要执行以下查询: 返回一个SQL查询字符串,该字符串将查找一个国家拥有的体育项目 在奥运会上获得奖牌。它应该包括奖牌的数量,别名为“计数”, 以及这项运动所代表的这个国家获胜的百分比, 别名为“百分比”。可选择按指定方向按给定字段排序 我已经解决了过滤部分。对于第一部分,考虑到一个国家“挪威”,我有:如何计算分组查询中每行计数(*)之和的百分比SQL,sql,sqlite,count,sum,Sql,Sqlite,Count,Sum,我在一个在线学习网站的项目中遇到了问题。拥有如下所示的数据库: 我需要执行以下查询: 返回一个SQL查询字符串,该字符串将查找一个国家拥有的体育项目 在奥运会上获得奖牌。它应该包括奖牌的数量,别名为“计数”, 以及这项运动所代表的这个国家获胜的百分比, 别名为“百分比”。可选择按指定方向按给定字段排序 我已经解决了过滤部分。对于第一部分,考虑到一个国家“挪威”,我有: SELECT sport, count(*) as count FROM GOLDMEDAL WHERE COUNTRY
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;
嘿,安基特!如果我错了,请纠正我,但我认为子查询也需要为请求的国家过滤掉,如果不是,它将计算该国该项运动在每个国家赢得的每枚奖牌中所占的百分比。我发布了我得到的解决方案,非常感谢!