i have table emp :
x
emp_id quantity
1001 21
1001 10
1002 3
1002 5
1004 4
1004 5
1004 8
i want to get the id having 2nd highest sum
so expected output is
1004 17
let me know how can this be done?
SELECT *,
ROW_NUMBER() OVER(ORDER BY sum_col DESC) as rownum
FROM(
select order_id,
sum(quantity) as sum_col
from order1
group by order_id) t
WHERE t.rownum=2
my query is giving error at line: WHERE t.rownum=2 However if i remove this line it works fine. Let me know how can i put this condition
Advertisement
Answer
WITH cte AS ( SELECT emp_id,
SUM(quantity) `sum`,
DENSE_RANK() OVER (ORDER BY SUM(quantity) DESC) `rank`
FROM test
GROUP BY 1 )
SELECT emp_id, `sum`
FROM cte
WHERE `rank` = 2;
DENSE_RANK()
needed (not RANK()
) because if, for example, there is 2 rows with highest sum then they’ll have RANK and DENSE_RANK equal to 1, but for the next sum value DENSE_RANK will be 2 whereas single RANK will be 3.