自定义聚合函数求中位数
来源:互联网 发布:mac 查找bootcamp文件 编辑:程序博客网 时间:2024/05/21 17:12
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.IO;
using System.Collections.Generic;
[Serializable]
[SqlUserDefinedAggregate(Format.UserDefined,
MaxByteSize = 8000,
IsNullIfEmpty = true,
Name = "MiddleNumber")]
public class MiddleNumber : IBinarySerialize
{
public void Init()
{
list = new List<double>();
}
public void Accumulate(SqlDouble Value)
{
if (Value.IsNull == false)
list.Add(Value.Value);
}
public void Merge(MiddleNumber Group)
{
list.AddRange(Group.list);
}
public SqlDouble Terminate()
{
double re = 0;
int lCount = 0;
list.Sort();
lCount = list.Count;
if (lCount > 0)
{
if (lCount % 2 == 0)
{
re = (double)((Convert.ToDouble(list[lCount / 2 - 1]) + Convert.ToDouble(list[lCount / 2])) / 2.0);
}
else
{
re = (double)(Convert.ToDouble(list[Convert.ToInt32(Math.Floor(lCount / 2.0))]));
}
return new SqlDouble(re);
}
else
{
return SqlDouble.Null;
}
}
public void Write(BinaryWriter writer)
{
int lCount = list.Count;
writer.Write(lCount);
if (lCount > 0)
{
foreach (double number in list)
{
writer.Write(number);
}
}
}
public void Read(BinaryReader reader)
{
int lCount = reader.ReadInt32();
list = new List<double>();
for (int i = 0; i < lCount; i++)
{
list.Add(reader.ReadDouble());
}
}
// 这是占位符成员字段
private List<double> list;
}
--SQL SERVER
CREATE ASSEMBLY ass_test
FROM 'G:/CLR_Test/SqlServerProject5/SqlServerProject5/bin/Debug/SqlServerProject5.dll';
GO
CREATE AGGREGATE MiddleNumber(@number float)
RETURNS float
EXTERNAL NAME ass_test.MiddleNumber;
GO
declare @t table(id int,val float)
insert @t select 1,20.2
union all select 1,50
union all select 1,20
union all select 2,50
union all select 2,20
union all select 3,null
union all select 4,0
--查询
select id,dbo.MiddleNumber(val) as 中位数
from @t
group by id
/*
id 中位数
----------- ----------------------
1 20.2
2 35
3 NULL
4 0
(4 行受影响)
*/
- 自定义聚合函数求中位数
- matlab max/min/median函数用法以及自定义函数求最大最小值和中位数
- 自定义聚合函数
- oracle自定义聚合函数
- 自定义聚合函数
- oralce-自定义聚合函数
- 求自定义类型序列中的中位数
- 自定义多参数聚合函数
- oracle 自定义 group 聚合函数
- 求中位数
- 求中位数。
- 求中位数
- ORACLE分析函数(7)----自定义聚合函数
- ORACLE分析函数----自定义聚合函数
- C#聚合函数中求最小值,平均值
- 不用聚合函数求最高工资
- 用Oracle自定义聚合函数实现字符串连接的聚合
- Oracle自定义聚合函数实现字符串连接的聚合
- 2个Panel Control, 一个将它的dock设成right,另一个将它的dock设成full. 可是,那个dock为full的control,始终占满整个窗口。
- SQL Server中巧用另类写法代替Like语句
- nginx 初体验
- url重写
- (转)从本质上改变生活质量的十种方法
- 自定义聚合函数求中位数
- Save could not be completed.MyEclipse国际化的问题解决
- 手机触摸屏程序开发
- url重写例子
- NET-SNMP发Trap
- java中的equals()方法
- 资料
- 页面事件(Init,Load,PreRender)执行顺序
- SVN:show log with no date的解决方法