提交 4ff10781 编写于 作者: G Ganlin Zhao

feat(query): add avg function scalar version

TD-17344
上级 7e661a9e
...@@ -1924,7 +1924,7 @@ int32_t avgScalarFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam * ...@@ -1924,7 +1924,7 @@ int32_t avgScalarFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *
SColumnInfoData *pOutputData = pOutput->columnData; SColumnInfoData *pOutputData = pOutput->columnData;
int32_t type = GET_PARAM_TYPE(pInput); int32_t type = GET_PARAM_TYPE(pInput);
int64_t count = 0, sum = 0; int64_t count = 0;
bool hasNull = false; bool hasNull = false;
for (int32_t i = 0; i < pInput->numOfRows; ++i) { for (int32_t i = 0; i < pInput->numOfRows; ++i) {
...@@ -1936,77 +1936,89 @@ int32_t avgScalarFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam * ...@@ -1936,77 +1936,89 @@ int32_t avgScalarFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *
switch(type) { switch(type) {
case TSDB_DATA_TYPE_TINYINT: { case TSDB_DATA_TYPE_TINYINT: {
int8_t *in = (int8_t *)pInputData->pData; int8_t *in = (int8_t *)pInputData->pData;
sum += in[i]; int64_t *out = (int64_t *)pOutputData->pData;
*out += in[i];
count++; count++;
break; break;
} }
case TSDB_DATA_TYPE_SMALLINT: { case TSDB_DATA_TYPE_SMALLINT: {
int16_t *in = (int16_t *)pInputData->pData; int16_t *in = (int16_t *)pInputData->pData;
sum += in[i]; int64_t *out = (int64_t *)pOutputData->pData;
*out += in[i];
count++; count++;
break; break;
} }
case TSDB_DATA_TYPE_INT: { case TSDB_DATA_TYPE_INT: {
int32_t *in = (int32_t *)pInputData->pData; int32_t *in = (int32_t *)pInputData->pData;
sum += in[i]; int64_t *out = (int64_t *)pOutputData->pData;
*out += in[i];
count++; count++;
break; break;
} }
case TSDB_DATA_TYPE_BIGINT: { case TSDB_DATA_TYPE_BIGINT: {
int64_t *in = (int64_t *)pInputData->pData; int64_t *in = (int64_t *)pInputData->pData;
sum += in[i]; int64_t *out = (int64_t *)pOutputData->pData;
*out += in[i];
count++; count++;
break; break;
} }
case TSDB_DATA_TYPE_UTINYINT: { case TSDB_DATA_TYPE_UTINYINT: {
uint8_t *in = (uint8_t *)pInputData->pData; uint8_t *in = (uint8_t *)pInputData->pData;
sum += in[i]; uint64_t *out = (uint64_t *)pOutputData->pData;
*out += in[i];
count++; count++;
break; break;
} }
case TSDB_DATA_TYPE_USMALLINT: { case TSDB_DATA_TYPE_USMALLINT: {
uint16_t *in = (uint16_t *)pInputData->pData; uint16_t *in = (uint16_t *)pInputData->pData;
sum += in[i]; uint64_t *out = (uint64_t *)pOutputData->pData;
*out += in[i];
count++; count++;
break; break;
} }
case TSDB_DATA_TYPE_UINT: { case TSDB_DATA_TYPE_UINT: {
uint32_t *in = (uint32_t *)pInputData->pData; uint32_t *in = (uint32_t *)pInputData->pData;
sum += in[i]; uint64_t *out = (uint64_t *)pOutputData->pData;
*out += in[i];
count++; count++;
break; break;
} }
case TSDB_DATA_TYPE_UBIGINT: { case TSDB_DATA_TYPE_UBIGINT: {
uint64_t *in = (uint64_t *)pInputData->pData; uint64_t *in = (uint64_t *)pInputData->pData;
sum += in[i]; uint64_t *out = (uint64_t *)pOutputData->pData;
*out += in[i];
count++; count++;
break; break;
} }
case TSDB_DATA_TYPE_FLOAT: { case TSDB_DATA_TYPE_FLOAT: {
float *in = (float *)pInputData->pData; float *in = (float *)pInputData->pData;
sum += in[i]; float *out = (float *)pOutputData->pData;
*out += in[i];
count++; count++;
break; break;
} }
case TSDB_DATA_TYPE_DOUBLE: { case TSDB_DATA_TYPE_DOUBLE: {
double *in = (double *)pInputData->pData; double *in = (double *)pInputData->pData;
sum += in[i]; double *out = (double *)pOutputData->pData;
*out += in[i];
count++; count++;
break; break;
} }
} }
} }
double *out = (double *)pOutputData->pData;
if (hasNull) { if (hasNull) {
colDataAppendNULL(pOutputData, 0); colDataAppendNULL(pOutputData, 0);
} else { } else {
if (IS_SIGNED_NUMERIC_TYPE(type)) { if (IS_SIGNED_NUMERIC_TYPE(type)) {
*out = (int64_t)sum / (double)count; int64_t *out = (int64_t *)pOutputData->pData;
*(double *)out = *out / (double)count;
} else if (IS_UNSIGNED_NUMERIC_TYPE(type)) { } else if (IS_UNSIGNED_NUMERIC_TYPE(type)) {
*out = (uint64_t)sum / (double)count; uint64_t *out = (uint64_t *)pOutputData->pData;
*(double *)out = *out / (double)count;
} else if (IS_FLOAT_TYPE(type)) { } else if (IS_FLOAT_TYPE(type)) {
*out = (double)sum / (double)count; double *out = (double *)pOutputData->pData;
*(double *)out = *out / (double)count;
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册