【发布时间】:2017-02-21 17:56:50
【问题描述】:
这是一个 SQL 查询(在 Google BigQuery 环境中使用他们的一个演示数据集,但这是一个标准 SQL 问题):
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
假设我有兴趣了解 Linda 每十年的排名。因此,我希望查询告诉我 Linda 在 1940 年代排名第二,而 Linda 在 1950 年代排名第二。然而,在给定的查询中排名顺序是绝对的,因此 Linda 在 1950 年代排在第 118 位(玛丽在 1950 年代排在第 117 位)。
结果集的一个sn-p:
name namecount Placement Decade
Mary 639971 1 40s
Linda 531587 2 40s
[ ... ]
Mary 625464 117 50s
Linda 564204 118 50s
如何重置排名,让 Mary 在 1950 年代显示为 #1,Linda 显示为 #2,并在随后的每个十年中以类似的方式重置排名?
【问题讨论】:
-
SQL Server 大查询
标签: sql google-bigquery rank