我有一个表,其中有三列zipcode、state和total_population。
ZIPCODE STATE POPULATION
11937 36 15511
11941 36 1822
11940 36 4933
12435 36 280
12063 36 441
64733 29 1251
64734 29 1952
64735 29 13653
我在找这个
zipcode state third_highest_population
11941 36 1822
4733 29 1251
我想不出一个找到第三大人口的方法每个state..any的帮助都是非常感谢的
发布于 2019-05-07 20:58:53
您可以使用窗口函数帮助按州对邮政编码人口进行排名,然后保留每个州的第三个排名。
SELECT *
FROM (
SELECT zipcode,
state,
total_population,
DENSE_RANK() OVER (PARTITION BY state ORDER BY total_population DESC) as ziprank
FROM yourtable
) r
WHERE ziprank = 3
根据您的数据,RANK()
、DENSE_RANK()
和ROW_NUMBER()
可能都可以在这里运行。DENSE_RANK()
保证你会得到至少1个(但可能更多)的排名为3。你可能会得到更多的原因是如果两个邮政编码在该州共享相同的人口。不过,这是非常不可能的,所以DENSE_RANK()
是一个很好的选择。
发布于 2019-05-07 20:58:55
类似于:
select * from (
select your_table.*, rank() over(partition by state order by totpop) rnk from your_table
) t
where
rnk = 3
发布于 2019-05-07 21:03:29
样本数据
DECLARE @Data AS TABLE (zipcode INT,
[state] VARCHAR(10),
[total_population] INT
)
INSERT INTO @Data
SELECT 500010,'Ap',24524540 UNION ALL
SELECT 500020,'KA',47857441 UNION ALL
SELECT 500030,'TN',89456655 UNION ALL
SELECT 500040,'KL',45775475 UNION ALL
SELECT 500050,'UP',47411189
DECLARE @N INT = 3 -- Specify highest total as you required
使用Co相关子查询
SELECT * FROM @Data
Go
SELECT zipcode,
[state],
[total_population]
FROM @Data e1
WHERE @N-1 = ( SELECT COUNT(DISTINCT [total_population])
FROM @Data e2
WHERE e2.[total_population] > e1.[total_population] )
https://stackoverflow.com/questions/56023066
复制相似问题