平均数、中位数、众数都是度量一组数据集中趋势的统计量。所谓集中趋势是指一组数据向某一中心值靠拢的倾向,测度集中趋势就是寻找数据一般水平的代表值或中心值。而这三个特征数又各有特点,能够从不同的角度提供信息。
平均数
- 特点:计算用到所有的数据,它能够充分利用数据提供的信息,它具有优 的数学性质,因此在实际应用中较为广泛。但它受极端值的影响较大。
- 应用场合:没有极端值的情况下数据集中趋势的刻画。
- 如:小明五次测试的成绩好下,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
参考资料