自定义聚合函数求中位数
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 management studio
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 行受影响)
*/相关推荐
自定义聚合函数
NULL 博文链接:https://yizhilong28.iteye.com/blog/668958
Oracle自定义聚合函数-分析函数
Oracle自定义聚合函数,分析函数.
使用IDEA编写SparkSql自定义聚合函数——强类型Dataset(求平均值)
SparkSql自定义聚合函数(强类型Dataset)求平均值 强类型的Dataset提供了相关的聚合函数, 如 count(),countDistinct(),avg(),max(),min(); 除此之外,用户可以设定自己的自定义聚合函数。 代码测试前请确保各个组件均已安装 1、环境准备 1、准备json文件: {name: zhangsan,age: 17} {name: lisi,age: 18} {name: wangwu,age: 20} 2、使用IDEA软件,创建maven工程 3、添加pom依赖 2、maven工程pom依赖 4.0.0
Sqlserver 2014 之 自定义字符串聚合函数
NULL 博文链接:https://yufeng521000.iteye.com/blog/2076607
Sql Server 字符串聚合函数
如下表:AggregationTable Id Name 1 赵 2 钱 1 孙 1 李 2 周 如果想得到下图的聚合结果 Id Name 1 赵孙李 2 钱周 利用SUM、AVG、COUNT、COUNT(*)、MAX 和 MIN是无法做到的。因为这些都是对数值的聚合。不过我们可以通过自定义函数的方式来解决这个问题。1.首先建立测试表,并插入测试数据: 代码如下:create table AggregationTable(Id int, [Name] varchar(10)) go insert into AggregationTable select 1,


应用实例
