Skip to content
Advertisement

Calculate Median with SQL (DB2)

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.

    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.

Advertisement