【问题标题】:How can I calculate the percentage, for each row, of the sum of the COUNT(*) in a grouped query? - SQL如何计算分组查询中每行 COUNT(*) 总和的百分比? - SQL
【发布时间】:2020-03-21 12:47:04
【问题描述】:

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

我需要执行以下查询:

返回一个 SQL 查询字符串,该字符串将查找一个国家/地区拥有的体育项目 赢得奖牌。它应该包括奖牌的数量,别名为'count', 以及这项运动在这个国家的胜利中所占的百分比, 别名为“百分比”。可选择按指定方向的给定字段排序。

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

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;

我无法通过统计挪威所在的每一行来判断,它拿回了该国为每项运动赢得的所有奖牌。还是谢谢!

【问题讨论】:

    标签: sql sqlite count sum


    【解决方案1】:

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

    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】:

      您可以使用以下查询 -

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

      【讨论】:

      • 嗨,Ankit!如果我错了,请纠正我,但我认为子查询也需要针对所请求的国家/地区进行过滤,如果不是,它将计算该国家/地区的该运动占每个国家/地区赢得的每枚奖牌的百分比。我发布了我得到的解决方案,非常感谢!
      【解决方案3】:

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

      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;
      

      【讨论】:

        猜你喜欢
        • 2021-09-05
        • 1970-01-01
        • 2021-11-06
        • 1970-01-01
        • 2012-10-07
        • 1970-01-01
        • 1970-01-01
        • 2017-11-12
        • 1970-01-01
        相关资源
        最近更新 更多