Created table named geosalary
with columns name
, id
, and salary
:
name id salary patrik 2 1000 frank 2 2000 chinmon 3 1300 paddy 3 1700
I tried this below code to find 2nd highest salary:
SELECT salary FROM (SELECT salary, DENSE_RANK() OVER(ORDER BY SALARY) AS DENSE_RANK FROM geosalary) WHERE DENSE_RANK = 2;
However, getting this error message:
ERROR: subquery in FROM must have an alias SQL state: 42601 Hint: For example, FROM (SELECT ...) [AS] foo. Character: 24
What’s wrong with my code?
Advertisement
Answer
I think the error message is pretty clear: your sub-select needs an alias.
SELECT t.salary FROM ( SELECT salary, DENSE_RANK() OVER (ORDER BY SALARY DESC) AS DENSE_RANK FROM geosalary ) as t --- this alias is missing WHERE t.dense_rank = 2