I’m having issues calculating the median for my result set and could use some help. I need to provide the median, max, min, avg, and standard deviation. There are 222 rows which can be more or less and I’m not sure what I have so far is an accurate way of calculating the median. Here is my query.
x
Select
min(nodes) as min_nodes
,max(nodes) as max_nodes
,avg(nodes) as avg_nodes
,max(nodes) + min(nodes))/2 as median_nodes
,stddev(nodes) as sd_nodes
from Table
Advertisement
Answer
Here’s one way to calculate the median:
select avg(nodes)
from (
select nodes
, row_number() over(order by nodes asc) as rn1
, row_number() over(order by nodes desc) as rn2
from table
) as x(nodes, rn1, rn2)
where rn1 in (rn2, rn2 - 1, rn2 + 1)
Enumerating the nodes in both directions is an optimization.