zoukankan      html  css  js  c++  java
  • [转]How to calculate Median in SQL Server

    How to calculate Median in SQL Server

    Nothing earth-shattering here, I was just helping out a colleague with this so I thought I'd post up the example I gave him.

    -- sample table:
    create table People
    (
        Person varchar(1) primary key,
        City varchar(10),
        Age int
    )

    go

    -- with some sample data:

    insert into People
    select 'A','Boston',23 union all  -- odd #
    select 'B','Boston',43 union all
    select 'C','Boston',29 union all

    select 'D','Chicago',15 union all -- single #

    select 'E','NY',12 union all  -- even #
    select 'F','NY',55 union all
    select 'G','NY',57 union all
    select 'H','NY',61


    go

    -- here's our query, showing median age per city:

    select city,
        AVG(age) as MedianAge
    from
    (
        select City, Person, Age,
            ROW_NUMBER() over (partition by City order by Age ASC) as AgeRank,
            COUNT(*) over (partition by City) as CityCount
        from
            People
    ) x
    where
        x.AgeRank in (x.CityCount/2+1, (x.CityCount+1)/2)   
    group by
        x.City    
       

    go

    -- clean it all up
    drop table People

    And here's the result:


    city       MedianAge
    ---------- -----------
    Boston     29
    Chicago    15
    NY         56

    (3 row(s) affected)

    Simply remove "City" from the SELECT clause and the GROUP BY clause to get the median age for all. 

    There may be more efficient tricks out there, but this is certainly the shortest and simplest technique I am aware of.

  • 相关阅读:
    1860 最大数
    1164 统计数字
    1063 合并果子
    1098 均分纸牌
    2806 红与黑
    1168 火柴棒等式
    1910 递归函数
    2774 火烧赤壁
    2017.0705.《计算机组成原理》-存储器
    2017.0704.《计算机组成原理》-动态RAM
  • 原文地址:https://www.cnblogs.com/gzhu/p/2521688.html
Copyright © 2011-2022 走看看