Hier ist eine SQL-Abfrage (in der Umwelt Google BigQuery einen ihrer Demo-Datensätze verwenden, aber dies ist eine Standard-SQL-Frage):Mit Rang() in SQL-Gruppen Rang
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
Lasst sie sagen, ich bin interessiert an den Rang für Linda für jedes Jahrzehnt zu wissen. Daher möchte ich, dass die Abfrage mir sagt, dass Linda in den 1940er Jahren den 2. Platz belegt und Linda in den 1950er Jahren den 2. Platz belegt. Allerdings ist die Rangordnung in der gegebenen Abfrage absolut, somit ist Linda in den 1950er Jahren der 118. (Mary ist in den 1950er Jahren der Führer an 117. Stelle).
Ein Ausschnitt aus der Ergebnismenge:
name namecount Placement Decade
Mary 639971 1 40s
Linda 531587 2 40s
[ ... ]
Mary 625464 117 50s
Linda 564204 118 50s
Wie der Rang zurückgesetzt, so dass Maria als # 1 für die 1950er Jahre zeigt und Linda zeigt mich als # 2 und die Reihen in einem ähnlichen zurücksetzen Art für jedes nachfolgende Jahrzehnt?
SQL Server <> Big Abfrage –