我在在线学习网站上的项目中遇到无法查询的问题。具有如下所示的数据库:
我需要执行以下查询:
返回一个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;
我无法通过计数挪威所在的每一行来算出它获得了该国为每种运动赢得的所有奖牌。还是谢谢!
答案 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;