聚合函数
概述
聚合函数通常用于对结果集中的某一列执行操作。SmartESQL 提供的标准聚合函数列于下表。请注意,所有聚合函数返回该表列中存储的值的类型。
聚合函数 | 说明 |
---|---|
avg(column_name) | 返回指定列中所有值的平均值。 |
count(*) | 返回结果集中的行数。 |
max(column_name) | 返回指定列中的最大值。 |
min(column_name) | 返回指定列中的最小值。 |
sum(column_name) | 返回指定列中所有值的总和。 |
以下代码片段演示了内置聚合函数的使用:
void queryContributions()
{
// 执行查询以计算所有人员的平均年龄
QueryResult result(engine.executeQuery("select avg(amount), min(amount),
max(amount), sum(amount) from Contributions"));
// 获得游标
Cursor* cursor = result->records();
// 结果数据源包含一条记录,且只有一个字段。
// 列的索引从 0 开始。
Record* rec = cursor->next();
Value* avg = rec->get(0);
Value* min = rec->get(1);
Value* max = rec->get(2);
Value* sum = rec->get(3);
printf("\n\tAverage Contribution: %f\n", (float)avg->realValue());
printf("\n\tMinimum Contribution: %f\n", (float)min->realValue());
printf("\n\tMaximum Contribution: %f\n", (float)max->realValue());
printf("\n\tTotal of Contributions: %f\n", (float)sum->realValue());
}
用户定义的聚合函数
SmartESQL 还允许开发人员创建自己的用户定义聚合函数。用户定义函数(UDF)必须定义为返回类型为 static Value*
,并且可以接受类型为 Value*
的参数。然后,必须通过声明一个类型为 static SqlFunctionDeclaration udf ()
的函数,并指定返回类型、用于调用它的名称、指向该函数的指针以及所需的参数数量,将其“注册”到 SmartESQL 运行时环境中。
以下代码片段定义并注册了一个用户自定义函数(UDF):
static Value* mod(Value* a, Value* b)
{
if (a->isNull() || b->isNull())
{
return NULL;
}
return new IntValue(a->intValue() % b->intValue());
}
// f1 是 SqlFunctionDeclaration 类的一个实例。
// 构造函数将名为“mod”的用户定义函数的此声明链接到SmartESQL内部维护的所有UDF列表中:
static SqlFunctionDeclaration f1
(
tpInt, // tpInt 是用户自定义函数的返回值。
"mod", // 我们在查询中使用的函数名称
(void*)mod, // 函数指针
2 // 用户定义函数(UDF)的参数数量
);
然后,可以在普通的 SQL 选择语句中调用该用户定义函数。例如,以下语句选择名为 code 的列的值能被 3 整除的记录。
select * from T where mod(code,3) = 0;