diff --git a/source/libs/function/src/builtinsimpl.c b/source/libs/function/src/builtinsimpl.c index 909659701cc45b293e00b752761457a7f354b2a8..7229cf98b0c3cb79b05039f29303cbab15fc6ba5 100644 --- a/source/libs/function/src/builtinsimpl.c +++ b/source/libs/function/src/builtinsimpl.c @@ -1972,7 +1972,6 @@ bool histogramFunctionSetup(SqlFunctionCtx *pCtx, SResultRowEntryInfo *pResultIn } int32_t histogramFunction(SqlFunctionCtx *pCtx) { - int32_t numOfElems = 0; SHistoFuncInfo* pInfo = GET_ROWCELL_INTERBUF(GET_RES_INFO(pCtx)); SInputColumnInfoData* pInput = &pCtx->input; @@ -1983,6 +1982,8 @@ int32_t histogramFunction(SqlFunctionCtx *pCtx) { int32_t start = pInput->startRowIndex; int32_t numOfRows = pInput->numOfRows; + int32_t numOfElems = 0; + int32_t totalElems = 0; for (int32_t i = start; i < numOfRows + start; ++i) { if (pCol->hasNull && colDataIsNull_f(pCol->nullbitmap, i)) { continue; @@ -1997,9 +1998,21 @@ int32_t histogramFunction(SqlFunctionCtx *pCtx) { for (int32_t k = 0; k < pInfo->numOfBins; ++k) { if (v > pInfo->bins[k].lower && v <= pInfo->bins[k].upper) { pInfo->bins[k].count++; + totalElems++; break; } } + + } + + if (pInfo->normalized) { + for (int32_t k = 0; k < pInfo->numOfBins; ++k) { + if(totalElems != 0) { + pInfo->bins[k].percentage = pInfo->bins[k].count / (double)totalElems; + } else { + pInfo->bins[k].percentage = 0; + } + } } SET_VAL(GET_RES_INFO(pCtx), numOfElems, pInfo->numOfBins);