Попробуйте указать псевдоним для своего подзапроса:
SELECT s.constituency,s.party, s.votes
FROM (
SELECT constituency,party, votes, RANK() OVER (ORDER BY votes DESC) as posn
FROM ge
WHERE posn =1 and yr = 2017 ) s
WHERE s.constituency BETWEEN 'S14000021' AND 'S14000026'
ORDER BY s.constituency,s.votes DESC
Что касается примечания, я не совсем уверен, что использование between
в столбце string
даст вам желаемые результаты, может быть лучше сделать это вместо:
s.constituency in ('S14000021', 'S14000022', 'S14000023',
'S14000024', 'S14000025' 'S14000026')
Отредактированный запрос
Похоже, вы пытаетесь выяснить, кто набрал наибольшее количество голосов в избирательном округе, поэтому запрос должен выглядеть примерно так: (rank
должно быть рассчитано для каждого избирательного округа, следовательно partition by
):
SELECT s.constituency,s.party, s.votes
FROM (
SELECT constituency,
party,
votes,
RANK() OVER (PARTITION BY constituency ORDER BY votes DESC) posn
FROM ge
WHERE yr = 2017 ) s
WHERE s.constituency in ('S14000021', 'S14000022', 'S14000023',
'S14000024', 'S14000025' 'S14000026')
and s.posn = 1
ORDER BY s.constituency,s.votes DESC