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

时间:2020-03-21 12:47:04

标签: sql sqlite count sum

我在在线学习网站上的项目中遇到无法查询的问题。具有如下所示的数据库:

Database structure, SQLite

我需要执行以下查询:

返回一个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;

我无法通过计数挪威所在的每一行来算出它获得了该国为每种运动赢得的所有奖牌。还是谢谢!

3 个答案:

答案 0 :(得分:0)

您可以使用以下查询-

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

执行此操作的最佳方法是使用窗口函数,而不是子查询:

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;
相关问题