首页 > 解决方案 > 如何从每个国家/地区提取前 10 位亿万富翁

问题描述

假设我有一个名为的表,其中包含来自每个国家/地区的亿万富翁个人的Billionaires属性Country, Name, 。Net Worth

我希望每个国家/地区拥有最高净资产的前 10 名个人的净资产加起来。

样本输出就像

国家 全网
我们。 500000000000
印度。 300000000000

等等。

我尝试过的代码:

Select Country, Sum(NetWorth) over (partition by country) as TotalNetworth
From Billionaires

标签: sqlsql-server

解决方案


DENSE_RANK() 函数在这里适用于检索国家排名前 10 的个人亿万富翁。如果两个人在一个国家/地区拥有相同的净资产,则将其视为 1 而不是 2。 DENSE_RANK() 提供没有差距的排名。

-- SQL SERVER
SELECT t.Country
     , SUM(t.NetWorth) TotalNetworth
FROM (SELECT Country
           , NetWorth
           , DENSE_RANK() OVER (PARTITION BY Country ORDER BY NetWorth DESC) rank_num
      FROM Billionaires) t
WHERE t.rank_num <= 10
GROUP BY t.Country; 

但是,如果需要国家明智的前 10 名亿万富翁的名字,那么使用下面的查询如果一个国家的两个人拥有相同的净资产,那么计数是 2 而不是 1。

-- SQL SERVER
SELECT t.Country
     , SUM(t.NetWorth) TotalNetworth
FROM (SELECT Country
           , NetWorth
           , ROW_NUMBER() OVER (PARTITION BY Country ORDER BY NetWorth DESC) rank_num
      FROM Billionaires) t
WHERE t.rank_num <= 10
GROUP BY t.Country;

推荐阅读