ID:   密码:   验证码:  
我的知识库
服务器-WEB服务器
服务器-FTP服务器
服务器-安全防护
IDC业务相关
网络编程-ASP
网络编程-PHP
网络编程-.NET
网络编程-XML
数据库-Access
数据库-Mssql
数据库-Mysql
游戏技术-传奇私服
游戏技术-传世私服
主机相关问题
域名相关问题
邮局相关问题
付款相关问题
相关文本合同
常用软件下载
首页 >> 我的知识库>>数据库-Mysql>> 扩展求方差的mysql函数例子  
扩展求方差的mysql函数例子
[ 作者: JiangMiao | 文章来源: 编程中国 | 点击数: 587 | 更新时间: 2007-11-4 8:58:17 ]

源码

以下为引用的内容:

// Author: JiangMiao
// Name: 扩展求方差的MySQL函数列子
// Date: 2006-10-19
// Link: http://blog.sina.com.cn/u/1259926384 - JiangMiao的Blog
#include "winsock2.h"
#include "MySQL.h"
#include
using namespace std;
#define SAFE_DELETE(p) if(p!=NULL){delete p;p=NULL;}
#define CDLLEXPORT extern "C" __declspec(dllexport)
typedef __int64 longlong;
typedef vector vec_double;
typedef unsigned long ulong;
class VAR
{
private:
vec_double datas;
double total;

中国.南通服务器网

public:
VAR():total(0.0) {}
//加入num
void push_back(double num)
{
datas.push_back(num);
total+=num;
}
void clear()
{
datas.clear();
total=0.0;
}
//取方差
double getVariance()
{
size_t count=datas.size();
double avr=0.0;
avr=(total/count); //平均数
double rt=0.0;
for(size_t i=0;i {
double k=(datas[i]-avr);
rt+=k*k;
}
return rt/count;
} 中国南通服务器网

};
CDLLEXPORT my_bool variance_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
{
initid->ptr = NULL;
if(args->arg_count!=1) //参数个数为1
{
return 1;
}
if(args->arg_type[0]!=REAL_RESULT||args->arg_type[0]!=INT_RESULT) //参数类别为整型或double
{
return 1;
}
initid->ptr = (char*)new VAR();
return 0;
}
CDLLEXPORT void variance_deinit(UDF_INIT *initid)
{
VAR* ptr=(VAR*)initid->ptr;
delete ptr;
}
CDLLEXPORT double variance(UDF_INIT *initid, UDF_ARGS *args,char *is_null, char *error)
{
VAR* ptr=(VAR*)initid->ptr;
return ptr->getVariance();
}
CDLLEXPORT void variance_clear(UDF_INIT *initid, char *is_null, char *error)
{
VAR* ptr=(VAR*)initid->ptr;
ptr->clear();
}
CDLLEXPORT void variance_add(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error)
{
VAR* ptr=(VAR*)initid->ptr; 中.国.南通服务器网
char* argo=args->args[0];
double arg;
if(args->arg_type[0]==REAL_RESULT)
{
arg=*(double*)argo;
}
if(args->arg_type[0]==INT_RESULT)
{
arg=(double)*(__int64*)argo;
}
ptr->push_back(arg);
}

中.国南通服务器网

Www.Spdns.com

编译后得到variance.dll

Spdns_com

复制到bin目录下 中国.南通服务器网

测试 中国.南通服务器网

以下为引用的内容:

MySQL> use test;
Database changed
MySQL> create table vartest (realtest real,inttest int);
Query OK, 0 rows affected (0.11 sec)

中国.南通服务器网

MySQL> insert into vartest values(5,5),(6,6),(9,9),(10,10),(5,5);
Query OK, 5 rows affected (0.03 sec)
Records: 5 Duplicates: 0 Warnings: 0

中国南通服务器网,为中文网南通服务器网

Tags:扩展 求方差 mysql 函数
责任编辑:阿小



评论
收藏
推荐
打印
关闭
字体:+ -
纠错



Copyright © 1999-2007 诚信 合法 规范的南通服务器网 www.spdns.com 始建于1996
企业总机:400-618-5529(只收市话费) 未开通400地区:0513-83015999 / 84012988 / 84519829
上海亿流数码科技有限公司 地址:江苏省南通市如东电信局大楼3楼IDC运维部
《中华人民共和国增值电信业务经营许可证》沪B2-20060518号
信息产业部备案编号:苏ICP备05009350号
电子执照:沪企3102272090823