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