下面是一個SQL查詢(在使用他們的演示的數據集之一的谷歌BigQuery的環境,但是這是一個標準的SQL問題):在SQL中使用RANK()排名小組
SELECT name, sum(number) as namecount, RANK(name)
OVER (ORDER BY decade, namecount DESC) as PLACEMENT,
case
when year >= 1940 and year <= 1949 then '40s'
when year >= 1950 and year <= 1959 then '50s'
when year >= 1960 and year <= 1969 then '60s'
when year >= 1970 and year <= 1979 then '70s'
when year >= 1980 and year <= 1989 then '80s'
when year >= 1990 and year <= 1999 then '90s'
when year >= 2000 and year <= 2014 then 'Nowish'
else
'other'
end as DECADE
FROM [bigquery-public-data:usa_names.usa_1910_2013]
where gender = 'F' and year > 1939
group by decade, name
having namecount > 25000
order by decade, namecount DESC
limit 1000000
比方說,我有興趣瞭解每個十年琳達的排名。因此,我想查詢告訴我,琳達在二十世紀四十年代排名第二,琳達在二十世紀五十年代排名第二。然而,在給定的查詢中排名順序是絕對的,因此琳達在20世紀50年代是第118位(瑪麗是在1950年代第117位的領導者)。
結果集的一個片段:
name namecount Placement Decade
Mary 639971 1 40s
Linda 531587 2 40s
[ ... ]
Mary 625464 117 50s
Linda 564204 118 50s
如何重置等級,使瑪麗顯示爲#1 20世紀50年代和琳達顯示爲#2,並以類似的重置行列每個後續十年的方式?
SQL Server <>大查詢 –