sql 求峰度 偏度 中位数

liunana000 2015-04-09 11:19:43
create table test(
value int
)

insert into test select 3
union all
select 4
union all
select 5
union all
select 6


求出峰度 偏度 和中位数 谢谢大神!
...全文
441 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mr_Nice 2015-04-09
  • 打赏
  • 举报
回复
USE AdventureWorksDW;
Go
– 偏度
SELECT Skew = SUM(((Age*1.0-m.mean)/m.[StDev])*((Age*1.0-m.mean)/m.[StDev])*((Age*1.0-m.mean)/m.[StDev]))
              * MIN(m.corrfact1)
  FROM vTargetMail v CROSS JOIN
       (SELECT mean = AVG(Age*1.0), [StDev] = STDEV(Age),
               corrfact1 = COUNT(*)*1.0 / (COUNT(*)-1) / (COUNT(*)-2)
          FROM vTargetMail v) AS m;
--峰度
SELECT Kurt = SUM(SQUARE(SQUARE(((Age*1.0-m.mean)/m.[StDev])))) * MIN(m.corrfact2) - MIN(m.subfact)
  FROM vTargetMail v CROSS JOIN
       (SELECT mean = AVG(Age*1.0), [StDev] = STDEV(Age),
               corrfact2 = COUNT(*)*1.0 * (COUNT(*)+1) / (COUNT(*)-1) / (COUNT(*)-2) / (COUNT(*)-3),
               subfact = 3.0 * SQUARE((COUNT(*)-1)) / (COUNT(*)-2) / (COUNT(*)-3)
          FROM vTargetMail v) AS m;
 
 
--中位数
Select ((
        Select Top 1 value
        From   (
                Select    Top 50 Percent value
                From    test
                Where    valueIs NOT NULL
                Order By value
                ) As A
        Order By value DESC) + 
        (
        Select Top 1 value
        From   (
                Select    Top 50 Percent value
                From    @Temp
                Where    valueIs NOT NULL
                Order By valueDESC
                ) As A
        Order By value Asc)) / 2
Mr_Nice 2015-04-09
  • 打赏
  • 举报
回复
USE AdventureWorksDW;
Go
– 偏度
SELECT Skew = SUM(((Age*1.0-m.mean)/m.[StDev])*((Age*1.0-m.mean)/m.[StDev])*((Age*1.0-m.mean)/m.[StDev]))
              * MIN(m.corrfact1)
  FROM vTargetMail v CROSS JOIN
       (SELECT mean = AVG(Age*1.0), [StDev] = STDEV(Age),
               corrfact1 = COUNT(*)*1.0 / (COUNT(*)-1) / (COUNT(*)-2)
          FROM vTargetMail v) AS m;
--峰度
SELECT Kurt = SUM(SQUARE(SQUARE(((Age*1.0-m.mean)/m.[StDev])))) * MIN(m.corrfact2) - MIN(m.subfact)
  FROM vTargetMail v CROSS JOIN
       (SELECT mean = AVG(Age*1.0), [StDev] = STDEV(Age),
               corrfact2 = COUNT(*)*1.0 * (COUNT(*)+1) / (COUNT(*)-1) / (COUNT(*)-2) / (COUNT(*)-3),
               subfact = 3.0 * SQUARE((COUNT(*)-1)) / (COUNT(*)-2) / (COUNT(*)-3)
          FROM vTargetMail v) AS m;


--中位数
Select ((
		Select Top 1 value
		From   (
				Select	Top 50 Percent value
				From	test
				Where	valueIs NOT NULL
				Order By value
				) As A
		Order By value DESC) + 
		(
		Select Top 1 value
		From   (
				Select	Top 50 Percent value
				From	@Temp
				Where	valueIs NOT NULL
				Order By valueDESC
				) As A
		Order By valueAsc)) / 2
Neo_whl 2015-04-09
  • 打赏
  • 举报
回复
首先中位数 select avg(value) as 中位数 from test
Neo_whl 2015-04-09
  • 打赏
  • 举报
回复
请解释下几个名词:峰度 偏度 和中位数,忘记这些东东了

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧