平均數_中位數_眾數在SqlServer實現


平均數、中位數、眾數都是度量一組數據集中趨勢的統計量。所謂集中趨勢是指一組數據向某一中心值靠攏的傾向,測度集中趨勢就是尋找數據一般水平的代表值或中心值。而這三個特征數又各有特點,能夠從不同的角度提供信息。

平均數


  • 特點:計算用到所有的數據,它能夠充分利用數據提供的信息,它具有優 的數學性質,因此在實際應用中較為廣泛。但它受極端值的影響較大。
  • 應用場合:沒有極端值的情況下數據集中趨勢的刻畫。
  • 如:小明五次測試的成績好下,87、88、89、93、94你認為小明這五次測試成績怎樣?
  • 分析:

中位數


  • 特點:中位數是一組數據中間位置的代表值。計算簡單,不受極端值的影響,但不能充分利用每個數據所提供的信息。
  • 應用場合:有極端值,且無某數據重復出現多次的情況下集中趨勢的刻畫。
  • 如:某公司員工月工資如下:
    這個公司員工的月工資有一般水平是多少?
    • 員工         經理 副經理 員工a  員工b  員工c   員工d   員工e   員工f    雜工
    • 月工資/元 6000 4000   1700  1300   1200    1100    1100    1100     500
  • 分析:這組數據的平均數是2000,而高於這一水平的只有2人,不具有代表性。其中位數是1200,處於其相當水平的有5人,占大多數。較好的反映了一般水平。

眾數


  • 特點:眾數是一組數據中出現次數最多的數據。不受極端值的影響,當一組數據中某些數據多次重復出現時,眾數往往是人們最關心的一個量。但它不能象平均數那樣充分利用數據提供信息。
  • 應用場合:有極端值,有某些數據多次重復出現時。
  • 如:一家鞋店在一段時間內銷售了某種女鞋30雙,各種尺碼鞋的銷量如下:
    你能為這家鞋店提供進貨建議嗎?
    • 尺碼/厘米   22   22.5   23    23.5    24    24.5    25
    • 銷售量/雙    1     1        2       5      15      5        1
  • 分析:由於進貨最關心的是哪種尺碼的鞋最多,而這里很明顯24碼的要占相當大的量15雙。較好的得到所需信息。

SqlServer驗證


  • CREATE TABLE graduates (
      name varchar(255) ,
      income int 
    )
    go
     
    INSERT INTO graduates VALUES ('桑普森', '400000');
    INSERT INTO graduates VALUES ('邁克', '30000');
    INSERT INTO graduates VALUES ('懷特', '20000');
    INSERT INTO graduates VALUES ('阿諾德', '20000');
    INSERT INTO graduates VALUES ('史密斯', '20000');
    INSERT INTO graduates VALUES ('勞倫斯', '15000');
    INSERT INTO graduates VALUES ('哈德遜', '15000');
    INSERT INTO graduates VALUES ('肯特', '10000');
    INSERT INTO graduates VALUES ('貝克', '10000');
    INSERT INTO graduates VALUES ('斯科特', '10000');
    

      

取眾數


  • select income,count(*) cnt 
    from graduates
    group by income
    having count(*) >= (
      select max(cnt) from (select count(*) cnt from graduates group by income) tmp
    ) 
    

      

取中位數


  • select AVG(DISTINCT income)
    from (
    select T1.income from graduates T1,graduates T2
    group by T1.income
    having sum(case when T2.income >= T1.income then 1 else 0 end) >= count(*)/2
    and sum(case when T2.income <= T1.income then 1 else 0 end) >= count(*)/2
    ) tmp
    go
    

取眾數對應的行

 


  • /*需求電壓眾數*/
    update ETL_Day_UserCar set ETL_Day_UserCar.DVMode = a.DVMode
      from (
            select a.BizDate,a.CustID,a.CarModel,a.maxdv as DVMode,count(1) as RecordCount, 
            Row_NUMBER() OVER(PARTITION BY BizDate,CustID,CarModel ORDER BY count(1) DESC) AS SN
            from ETL_UserCarReset a with(nolock)    
            group by a.BizDate,a.CustID,a.CarModel,a.maxdv
           ) a
     where ETL_Day_UserCar.BizDate = a.BizDate
       and ETL_Day_UserCar.CustID = a.CustID
       and ETL_Day_UserCar.CarModel = a.CarModel
       and a.SN = '1'
    go

     

      

參考資料



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM