9-Window function
练习题链接: https://sqlzoo.net/wiki/Window_functions
1.Warming up
SELECT lastName
,party
,votes
FROM ge
WHERE constituency = 'S14000024'
AND yr = 2017
ORDER BY votes DESC
2.Who won?
SELECT party
,votes
,RANK() OVER (ORDER BY votes DESC) as posn
FROM ge
WHERE constituency = 'S14000024'
AND yr = 2017
ORDER BY party
3.PARTITION BY
SELECT yr
,party
,votes
,RANK() OVER (PARTITION BY yr ORDER BY votes DESC) as posn
FROM ge
WHERE constituency = 'S14000021'
ORDER BY party,yr
4.Edinburgh Constituency
SELECT constituency
,party
,votes
,RANK() OVER(PARTITION BY constituency ORDER BY votes DESC) AS posn
FROM ge
WHERE constituency BETWEEN 'S14000021' AND 'S14000026'
AND yr = 2017
ORDER BY posn,constituency
5.Winners Only
SELECT constituency
,party
FROM (SELECT constituency
,party
,RANK() OVER(PARTITION BY constituency ORDER BY votes DESC) AS posn
FROM ge
WHERE constituency BETWEEN 'S14000021' AND 'S14000026'
AND yr = 2017
ORDER BY constituency,votes DESC) a
where posn=1
6.Scottish seats
SELECT party
,count(1)
from (SELECT constituency
,party
,RANK() OVER(PARTITION BY constituency ORDER BY votes DESC) AS posn
FROM ge
WHERE yr = 2017
and constituency like 'S%'
ORDER BY constituency,votes DESC) a
WHERE posn=1
GROUP BY party