You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2022/04/14 04:07:32 UTC

[incubator-doris] branch master updated: [Feature]support stddev/variance agg functions to window function (#8962)

This is an automated email from the ASF dual-hosted git repository.

morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 9ac6d23a44 [Feature]support stddev/variance agg functions to window function (#8962)
9ac6d23a44 is described below

commit 9ac6d23a443a9cd327fe94a86ae280478147c1d5
Author: zhangstar333 <87...@users.noreply.github.com>
AuthorDate: Thu Apr 14 12:07:26 2022 +0800

    [Feature]support stddev/variance agg functions to window function (#8962)
---
 be/src/exprs/aggregate_functions.cpp               |  173 +++-
 be/src/exprs/aggregate_functions.h                 |   17 +
 .../vec/aggregate_functions/aggregate_function.h   |    1 +
 .../aggregate_function_percentile_approx.h         |   17 +-
 .../java/org/apache/doris/catalog/FunctionSet.java |  167 +++-
 .../test_select_stddev_variance_window.out         | 1021 ++++++++++++++++++++
 .../correctness/test_stddev_variance_window.csv    |   15 +
 .../test_select_stddev_variance_window.groovy      |  155 +++
 8 files changed, 1496 insertions(+), 70 deletions(-)

diff --git a/be/src/exprs/aggregate_functions.cpp b/be/src/exprs/aggregate_functions.cpp
index f8bfa84ea3..30ab76eaa3 100644
--- a/be/src/exprs/aggregate_functions.cpp
+++ b/be/src/exprs/aggregate_functions.cpp
@@ -27,6 +27,7 @@
 #include "exprs/anyval_util.h"
 #include "exprs/hybrid_set.h"
 #include "runtime/datetime_value.h"
+#include "runtime/decimalv2_value.h"
 #include "runtime/runtime_state.h"
 #include "runtime/string_value.h"
 #include "util/counts.h"
@@ -1903,6 +1904,45 @@ void AggregateFunctions::knuth_var_update(FunctionContext* ctx, const T& src, St
     state->count = temp;
 }
 
+template <typename T>
+void AggregateFunctions::knuth_var_remove(FunctionContext* context, const T& src, StringVal* dst) {
+    if (src.is_null) {
+        return;
+    }
+    KnuthVarianceState* state = reinterpret_cast<KnuthVarianceState*>(dst->ptr);
+    double count = state->count - 1;
+    double mean = (state->mean * (count + 1) - src.val) / count;
+    double m2 = state->m2 - ((count * (src.val - mean) * (src.val - mean)) / (count + 1));
+    state->m2 = m2;
+    state->mean = mean;
+    state->count = count;
+}
+
+void AggregateFunctions::knuth_var_remove(FunctionContext* ctx, const DecimalV2Val& src,
+                                          StringVal* dst) {
+    if (src.is_null) {
+        return;
+    }
+    DecimalV2KnuthVarianceState* state = reinterpret_cast<DecimalV2KnuthVarianceState*>(dst->ptr);
+
+    DecimalV2Value now_src = DecimalV2Value::from_decimal_val(src);
+    DecimalV2Value now_mean = DecimalV2Value::from_decimal_val(state->mean);
+    DecimalV2Value now_m2 = DecimalV2Value::from_decimal_val(state->m2);
+    DecimalV2Value now_count = DecimalV2Value();
+    now_count.assign_from_double(state->count);
+    DecimalV2Value now_count_minus = DecimalV2Value();
+    now_count_minus.assign_from_double(state->count - 1);
+
+    DecimalV2Value decimal_mean = (now_mean * now_count - now_src) / now_count_minus;
+    DecimalV2Value decimal_m2 =
+            now_m2 -
+            ((now_count_minus * (now_src - decimal_mean) * (now_src - decimal_mean)) / now_count);
+
+    decimal_m2.to_decimal_val(&state->m2);
+    decimal_mean.to_decimal_val(&state->mean);
+    --state->count;
+}
+
 void AggregateFunctions::knuth_var_update(FunctionContext* ctx, const DecimalV2Val& src,
                                           StringVal* dst) {
     DCHECK(!dst->is_null);
@@ -1980,98 +2020,161 @@ void AggregateFunctions::decimalv2_knuth_var_merge(FunctionContext* ctx, const S
     new_dst_m2.to_decimal_val(&dst_state->m2);
 }
 
-DoubleVal AggregateFunctions::knuth_var_finalize(FunctionContext* ctx, const StringVal& state_sv) {
+DoubleVal AggregateFunctions::knuth_var_get_value(FunctionContext* ctx, const StringVal& state_sv) {
     KnuthVarianceState* state = reinterpret_cast<KnuthVarianceState*>(state_sv.ptr);
-    if (state->count == 0 || state->count == 1) return DoubleVal::null();
+    if (state->count == 0 || state->count == 1) {
+        return DoubleVal::null();
+    }
     double variance = compute_knuth_variance(*state, false);
-    ctx->free(state_sv.ptr);
     return DoubleVal(variance);
 }
 
-DecimalV2Val AggregateFunctions::decimalv2_knuth_var_finalize(FunctionContext* ctx,
-                                                              const StringVal& state_sv) {
+DoubleVal AggregateFunctions::knuth_var_finalize(FunctionContext* ctx, const StringVal& state_sv) {
+    DoubleVal result = knuth_var_get_value(ctx, state_sv);
+    ctx->free(state_sv.ptr);
+    return result;
+}
+
+DecimalV2Val AggregateFunctions::decimalv2_knuth_var_get_value(FunctionContext* ctx,
+                                                               const StringVal& state_sv) {
     DCHECK_EQ(state_sv.len, sizeof(DecimalV2KnuthVarianceState));
     DecimalV2KnuthVarianceState* state =
             reinterpret_cast<DecimalV2KnuthVarianceState*>(state_sv.ptr);
-    if (state->count == 0 || state->count == 1) return DecimalV2Val::null();
+    if (state->count == 0 || state->count == 1) {
+        return DecimalV2Val::null();
+    }
     DecimalV2Value variance = decimalv2_compute_knuth_variance(*state, false);
     DecimalV2Val res;
     variance.to_decimal_val(&res);
-    delete (DecimalV2KnuthVarianceState*)state_sv.ptr;
     return res;
 }
 
-DoubleVal AggregateFunctions::knuth_var_pop_finalize(FunctionContext* ctx,
-                                                     const StringVal& state_sv) {
+DecimalV2Val AggregateFunctions::decimalv2_knuth_var_finalize(FunctionContext* ctx,
+                                                              const StringVal& state_sv) {
+    DecimalV2Val result = decimalv2_knuth_var_get_value(ctx, state_sv);
+    delete (DecimalV2KnuthVarianceState*)state_sv.ptr;
+    return result;
+}
+
+DoubleVal AggregateFunctions::knuth_var_pop_get_value(FunctionContext* ctx,
+                                                      const StringVal& state_sv) {
     DCHECK_EQ(state_sv.len, sizeof(KnuthVarianceState));
     KnuthVarianceState* state = reinterpret_cast<KnuthVarianceState*>(state_sv.ptr);
-    if (state->count == 0) return DoubleVal::null();
+    if (state->count == 0) {
+        return DoubleVal::null();
+    }
     double variance = compute_knuth_variance(*state, true);
-    ctx->free(state_sv.ptr);
     return DoubleVal(variance);
 }
 
-DecimalV2Val AggregateFunctions::decimalv2_knuth_var_pop_finalize(FunctionContext* ctx,
-                                                                  const StringVal& state_sv) {
+DoubleVal AggregateFunctions::knuth_var_pop_finalize(FunctionContext* ctx,
+                                                     const StringVal& state_sv) {
+    DoubleVal result = knuth_var_pop_get_value(ctx, state_sv);
+    ctx->free(state_sv.ptr);
+    return result;
+}
+
+DecimalV2Val AggregateFunctions::decimalv2_knuth_var_pop_get_value(FunctionContext* ctx,
+                                                                   const StringVal& state_sv) {
     DCHECK_EQ(state_sv.len, sizeof(DecimalV2KnuthVarianceState));
     DecimalV2KnuthVarianceState* state =
             reinterpret_cast<DecimalV2KnuthVarianceState*>(state_sv.ptr);
-    if (state->count == 0) return DecimalV2Val::null();
+    if (state->count == 0) {
+        return DecimalV2Val::null();
+    }
     DecimalV2Value variance = decimalv2_compute_knuth_variance(*state, true);
     DecimalV2Val res;
     variance.to_decimal_val(&res);
-    delete (DecimalV2KnuthVarianceState*)state_sv.ptr;
     return res;
 }
 
-DoubleVal AggregateFunctions::knuth_stddev_finalize(FunctionContext* ctx,
-                                                    const StringVal& state_sv) {
+DecimalV2Val AggregateFunctions::decimalv2_knuth_var_pop_finalize(FunctionContext* ctx,
+                                                                  const StringVal& state_sv) {
+    DecimalV2Val result = decimalv2_knuth_var_pop_get_value(ctx, state_sv);
+    delete (DecimalV2KnuthVarianceState*)state_sv.ptr;
+    return result;
+}
+
+DoubleVal AggregateFunctions::knuth_stddev_get_value(FunctionContext* ctx,
+                                                     const StringVal& state_sv) {
     DCHECK_EQ(state_sv.len, sizeof(KnuthVarianceState));
     KnuthVarianceState* state = reinterpret_cast<KnuthVarianceState*>(state_sv.ptr);
-    if (state->count == 0 || state->count == 1) return DoubleVal::null();
+    if (state->count == 0 || state->count == 1) {
+        return DoubleVal::null();
+    }
     double variance = sqrt(compute_knuth_variance(*state, false));
-    ctx->free(state_sv.ptr);
     return DoubleVal(variance);
 }
 
-DecimalV2Val AggregateFunctions::decimalv2_knuth_stddev_finalize(FunctionContext* ctx,
-                                                                 const StringVal& state_sv) {
+DoubleVal AggregateFunctions::knuth_stddev_finalize(FunctionContext* ctx,
+                                                    const StringVal& state_sv) {
+    DoubleVal result = knuth_stddev_get_value(ctx, state_sv);
+    ctx->free(state_sv.ptr);
+    return result;
+}
+
+DecimalV2Val AggregateFunctions::decimalv2_knuth_stddev_get_value(FunctionContext* ctx,
+                                                                  const StringVal& state_sv) {
     DCHECK_EQ(state_sv.len, sizeof(DecimalV2KnuthVarianceState));
     DecimalV2KnuthVarianceState* state =
             reinterpret_cast<DecimalV2KnuthVarianceState*>(state_sv.ptr);
-    if (state->count == 0 || state->count == 1) return DecimalV2Val::null();
+    if (state->count == 0 || state->count == 1) {
+        return DecimalV2Val::null();
+    }
     DecimalV2Value variance = decimalv2_compute_knuth_variance(*state, false);
     variance = DecimalV2Value::sqrt(variance);
     DecimalV2Val res;
     variance.to_decimal_val(&res);
-    delete (DecimalV2KnuthVarianceState*)state_sv.ptr;
     return res;
 }
 
-DoubleVal AggregateFunctions::knuth_stddev_pop_finalize(FunctionContext* ctx,
-                                                        const StringVal& state_sv) {
+DecimalV2Val AggregateFunctions::decimalv2_knuth_stddev_finalize(FunctionContext* ctx,
+                                                                 const StringVal& state_sv) {
+    DecimalV2Val result = decimalv2_knuth_stddev_get_value(ctx, state_sv);
+    delete (DecimalV2KnuthVarianceState*)state_sv.ptr;
+    return result;
+}
+
+DoubleVal AggregateFunctions::knuth_stddev_pop_get_value(FunctionContext* ctx,
+                                                         const StringVal& state_sv) {
     DCHECK_EQ(state_sv.len, sizeof(KnuthVarianceState));
     KnuthVarianceState* state = reinterpret_cast<KnuthVarianceState*>(state_sv.ptr);
-    if (state->count == 0) return DoubleVal::null();
+    if (state->count == 0) {
+        return DoubleVal::null();
+    }
     double variance = sqrt(compute_knuth_variance(*state, true));
-    ctx->free(state_sv.ptr);
     return DoubleVal(variance);
 }
 
-DecimalV2Val AggregateFunctions::decimalv2_knuth_stddev_pop_finalize(FunctionContext* ctx,
-                                                                     const StringVal& state_sv) {
+DoubleVal AggregateFunctions::knuth_stddev_pop_finalize(FunctionContext* ctx,
+                                                        const StringVal& state_sv) {
+    DoubleVal result = knuth_stddev_pop_get_value(ctx, state_sv);
+    ctx->free(state_sv.ptr);
+    return result;
+}
+
+DecimalV2Val AggregateFunctions::decimalv2_knuth_stddev_pop_get_value(FunctionContext* ctx,
+                                                                      const StringVal& state_sv) {
     DCHECK_EQ(state_sv.len, sizeof(DecimalV2KnuthVarianceState));
     DecimalV2KnuthVarianceState* state =
             reinterpret_cast<DecimalV2KnuthVarianceState*>(state_sv.ptr);
-    if (state->count == 0) return DecimalV2Val::null();
+    if (state->count == 0) {
+        return DecimalV2Val::null();
+    }
     DecimalV2Value variance = decimalv2_compute_knuth_variance(*state, true);
     variance = DecimalV2Value::sqrt(variance);
     DecimalV2Val res;
     variance.to_decimal_val(&res);
-    delete (DecimalV2KnuthVarianceState*)state_sv.ptr;
     return res;
 }
 
+DecimalV2Val AggregateFunctions::decimalv2_knuth_stddev_pop_finalize(FunctionContext* ctx,
+                                                                     const StringVal& state_sv) {
+    DecimalV2Val result = decimalv2_knuth_stddev_pop_get_value(ctx, state_sv);
+    delete (DecimalV2KnuthVarianceState*)state_sv.ptr;
+    return result;
+}
+
 struct RankState {
     int64_t rank;
     int64_t count;
@@ -2757,6 +2860,14 @@ template void AggregateFunctions::knuth_var_update(FunctionContext*, const BigIn
 template void AggregateFunctions::knuth_var_update(FunctionContext*, const FloatVal&, StringVal*);
 template void AggregateFunctions::knuth_var_update(FunctionContext*, const DoubleVal&, StringVal*);
 
+template void AggregateFunctions::knuth_var_remove(FunctionContext*, const TinyIntVal&, StringVal*);
+template void AggregateFunctions::knuth_var_remove(FunctionContext*, const SmallIntVal&,
+                                                   StringVal*);
+template void AggregateFunctions::knuth_var_remove(FunctionContext*, const IntVal&, StringVal*);
+template void AggregateFunctions::knuth_var_remove(FunctionContext*, const BigIntVal&, StringVal*);
+template void AggregateFunctions::knuth_var_remove(FunctionContext*, const FloatVal&, StringVal*);
+template void AggregateFunctions::knuth_var_remove(FunctionContext*, const DoubleVal&, StringVal*);
+
 template void AggregateFunctions::first_val_update<BooleanVal>(FunctionContext*,
                                                                const BooleanVal& src,
                                                                BooleanVal* dst);
diff --git a/be/src/exprs/aggregate_functions.h b/be/src/exprs/aggregate_functions.h
index b010692079..de96cccf10 100644
--- a/be/src/exprs/aggregate_functions.h
+++ b/be/src/exprs/aggregate_functions.h
@@ -262,6 +262,8 @@ public:
     static void knuth_var_init(FunctionContext* context, StringVal* val);
     template <typename T>
     static void knuth_var_update(FunctionContext* context, const T& input, StringVal* val);
+    template <typename T>
+    static void knuth_var_remove(FunctionContext* context, const T& src, StringVal* dst);
     static void knuth_var_merge(FunctionContext* context, const StringVal& src, StringVal* dst);
     static DoubleVal knuth_var_finalize(FunctionContext* context, const StringVal& val);
 
@@ -274,8 +276,14 @@ public:
     /// Calculates the biased STDDEV, uses KnuthVar Init-Update-Merge functions
     static DoubleVal knuth_stddev_pop_finalize(FunctionContext* context, const StringVal& val);
 
+    static DoubleVal knuth_var_get_value(FunctionContext* ctx, const StringVal& state_sv);
+    static DoubleVal knuth_var_pop_get_value(FunctionContext* context, const StringVal& val);
+    static DoubleVal knuth_stddev_get_value(FunctionContext* ctx, const StringVal& state_sv);
+    static DoubleVal knuth_stddev_pop_get_value(FunctionContext* context, const StringVal& val);
+
     // variance/stddev for decimals.
     static void decimalv2_knuth_var_init(FunctionContext* context, StringVal* val);
+    static void knuth_var_remove(FunctionContext* ctx, const DecimalV2Val& src, StringVal* dst);
     static void knuth_var_update(FunctionContext* context, const DecimalV2Val& src, StringVal* val);
     static void decimalv2_knuth_var_merge(FunctionContext* context, const StringVal& src,
                                           StringVal* val);
@@ -288,6 +296,15 @@ public:
     static DecimalV2Val decimalv2_knuth_stddev_pop_finalize(FunctionContext* context,
                                                             const StringVal& val);
 
+    static DecimalV2Val decimalv2_knuth_var_get_value(FunctionContext* ctx,
+                                                      const StringVal& state_sv);
+    static DecimalV2Val decimalv2_knuth_var_pop_get_value(FunctionContext* context,
+                                                         const StringVal& val);
+    static DecimalV2Val decimalv2_knuth_stddev_get_value(FunctionContext* context,
+                                                        const StringVal& val);
+    static DecimalV2Val decimalv2_knuth_stddev_pop_get_value(FunctionContext* context,
+                                                            const StringVal& val);
+
     /// ----------------------------- Analytic Functions ---------------------------------
     /// Analytic functions implement the UDA interface (except Merge(), Serialize()) and are
     /// used internally by the AnalyticEvalNode. Some analytic functions store intermediate
diff --git a/be/src/vec/aggregate_functions/aggregate_function.h b/be/src/vec/aggregate_functions/aggregate_function.h
index 7506883d71..56e404d9e9 100644
--- a/be/src/vec/aggregate_functions/aggregate_function.h
+++ b/be/src/vec/aggregate_functions/aggregate_function.h
@@ -159,6 +159,7 @@ public:
         }
     }
     //now this is use for sum/count/avg/min/max win function, other win function should override this function in class
+    //stddev_pop/stddev_samp/variance_pop/variance_samp
     void add_range_single_place(int64_t partition_start, int64_t partition_end, int64_t frame_start,
                                 int64_t frame_end, AggregateDataPtr place, const IColumn** columns,
                                 Arena* arena) const override {
diff --git a/be/src/vec/aggregate_functions/aggregate_function_percentile_approx.h b/be/src/vec/aggregate_functions/aggregate_function_percentile_approx.h
index cca176784c..e2d4b8e3f9 100644
--- a/be/src/vec/aggregate_functions/aggregate_function_percentile_approx.h
+++ b/be/src/vec/aggregate_functions/aggregate_function_percentile_approx.h
@@ -35,7 +35,15 @@ struct PercentileApproxState {
 
     void init(double compression = 10000) {
         if (!init_flag) {
+            //https://doris.apache.org/zh-CN/sql-reference/sql-functions/aggregate-functions/percentile_approx.html#description
+            //The compression parameter setting range is [2048, 10000]. 
+            //If the value of compression parameter is not specified set, or is outside the range of [2048, 10000], 
+            //will use the default value of 10000
+            if (compression < 2048 || compression > 10000) {
+                compression = 10000;
+            }
             digest.reset(new TDigest(compression));
+            compressions = compression;
             init_flag = true;
         }
     }
@@ -47,6 +55,7 @@ struct PercentileApproxState {
         }
 
         write_binary(target_quantile, buf);
+        write_binary(compressions, buf);
         uint32_t serialize_size = digest->serialized_size();
         std::string result(serialize_size, '0');
         DCHECK(digest.get() != nullptr);
@@ -62,9 +71,10 @@ struct PercentileApproxState {
         }
 
         read_binary(target_quantile, buf);
+        read_binary(compressions, buf);
         std::string str;
         read_binary(str, buf);
-        digest.reset(new TDigest());
+        digest.reset(new TDigest(compressions));
         digest->unserialize((uint8_t*)str.c_str());
     }
 
@@ -84,7 +94,7 @@ struct PercentileApproxState {
             DCHECK(digest.get() != nullptr);
             digest->merge(rhs.digest.get());
         } else {
-            digest.reset(new TDigest());
+            digest.reset(new TDigest(compressions));
             digest->merge(rhs.digest.get());
             init_flag = true;
         }
@@ -101,12 +111,13 @@ struct PercentileApproxState {
     void reset() {
         target_quantile = INIT_QUANTILE;
         init_flag = false;
-        digest.reset();
+        digest.reset(new TDigest(compressions));
     }
 
     bool init_flag = false;
     std::unique_ptr<TDigest> digest = nullptr;
     double target_quantile = INIT_QUANTILE;
+    double compressions = 10000;
 };
 
 class AggregateFunctionPercentileApprox
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionSet.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionSet.java
index 7120a40ec5..ac8403843e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionSet.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionSet.java
@@ -402,7 +402,25 @@ public class FunctionSet<min_initIN9doris_udf12DecimalV2ValEEEvPNS2_15FunctionCo
                 .put(Type.DECIMALV2,
                         "16knuth_var_updateEPN9doris_udf15FunctionContextERKNS1_12DecimalV2ValEPNS1_9StringValE")
                 .build();
-
+                
+                                                               
+    private static final Map<Type, String> STDDEV_REMOVE_SYMBOL =
+        ImmutableMap.<Type, String>builder()
+                .put(Type.TINYINT,
+                        "16knuth_var_removeIN9doris_udf10TinyIntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
+                .put(Type.SMALLINT,
+                        "16knuth_var_removeIN9doris_udf11SmallIntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
+                .put(Type.INT,
+                        "16knuth_var_removeIN9doris_udf6IntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
+                .put(Type.BIGINT,
+                        "16knuth_var_removeIN9doris_udf9BigIntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
+                .put(Type.FLOAT,
+                        "16knuth_var_removeIN9doris_udf8FloatValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
+                .put(Type.DOUBLE,
+                        "16knuth_var_removeIN9doris_udf9DoubleValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
+                .put(Type.DECIMALV2,
+                        "16knuth_var_removeEPN9doris_udf15FunctionContextERKNS1_12DecimalV2ValEPNS1_9StringValE")
+                .build();                
     private static final Map<Type, String> STDDEV_MERGE_SYMBOL =
         ImmutableMap.<Type, String>builder()
                 .put(Type.TINYINT,
@@ -439,6 +457,24 @@ public class FunctionSet<min_initIN9doris_udf12DecimalV2ValEEEvPNS2_15FunctionCo
                         "31decimalv2_knuth_stddev_finalizeEPN9doris_udf15FunctionContextERKNS1_9StringValE")
                 .build();
 
+    private static final Map<Type, String> STDDEV_GET_VALUE_SYMBOL =
+        ImmutableMap.<Type, String>builder()
+                .put(Type.TINYINT,
+                        "22knuth_stddev_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+                .put(Type.SMALLINT,
+                        "22knuth_stddev_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+                .put(Type.INT,
+                        "22knuth_stddev_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+                .put(Type.BIGINT,
+                        "22knuth_stddev_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+                .put(Type.FLOAT,
+                        "22knuth_stddev_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+                .put(Type.DOUBLE,
+                        "22knuth_stddev_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+                .put(Type.DECIMALV2,
+                        "32decimalv2_knuth_stddev_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+                .build();
+
     private static final Map<Type, String> STDDEV_POP_FINALIZE_SYMBOL =
             ImmutableMap.<Type, String>builder()
                     .put(Type.TINYINT,
@@ -457,6 +493,24 @@ public class FunctionSet<min_initIN9doris_udf12DecimalV2ValEEEvPNS2_15FunctionCo
                             "35decimalv2_knuth_stddev_pop_finalizeEPN9doris_udf15FunctionContextERKNS1_9StringValE")
                     .build();
 
+    private static final Map<Type, String> STDDEV_POP_GET_VALUE_SYMBOL =
+        ImmutableMap.<Type, String>builder()
+                .put(Type.TINYINT,
+                "26knuth_stddev_pop_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+                .put(Type.SMALLINT,
+                "26knuth_stddev_pop_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+                .put(Type.INT,
+                "26knuth_stddev_pop_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+                .put(Type.BIGINT,
+                "26knuth_stddev_pop_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+                .put(Type.FLOAT,
+                "26knuth_stddev_pop_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+                .put(Type.DOUBLE,
+                "26knuth_stddev_pop_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+                .put(Type.DECIMALV2,
+                "36decimalv2_knuth_stddev_pop_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+                .build(); 
+                  
     private static final Map<Type, String> VAR_FINALIZE_SYMBOL =
         ImmutableMap.<Type, String>builder()
                 .put(Type.TINYINT,
@@ -475,6 +529,24 @@ public class FunctionSet<min_initIN9doris_udf12DecimalV2ValEEEvPNS2_15FunctionCo
                         "28decimalv2_knuth_var_finalizeEPN9doris_udf15FunctionContextERKNS1_9StringValE")
                 .build();
 
+    private static final Map<Type, String> VAR_GET_VALUE_SYMBOL =
+        ImmutableMap.<Type, String>builder()
+                .put(Type.TINYINT,
+                        "19knuth_var_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+                .put(Type.SMALLINT,
+                        "19knuth_var_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+                .put(Type.INT,
+                        "19knuth_var_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+                .put(Type.BIGINT,
+                        "19knuth_var_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+                .put(Type.FLOAT,
+                        "19knuth_var_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+                .put(Type.DOUBLE,
+                        "19knuth_var_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+                .put(Type.DECIMALV2,
+                        "29decimalv2_knuth_var_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+                .build(); 
+               
     private static final Map<Type, String> VAR_POP_FINALIZE_SYMBOL =
         ImmutableMap.<Type, String>builder()
                 .put(Type.TINYINT,
@@ -493,6 +565,23 @@ public class FunctionSet<min_initIN9doris_udf12DecimalV2ValEEEvPNS2_15FunctionCo
                         "32decimalv2_knuth_var_pop_finalizeEPN9doris_udf15FunctionContextERKNS1_9StringValE")
                 .build();
 
+    private static final Map<Type, String> VAR_POP_GET_VALUE_SYMBOL =
+        ImmutableMap.<Type, String>builder()
+                .put(Type.TINYINT,
+                        "23knuth_var_pop_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+                .put(Type.SMALLINT,
+                        "23knuth_var_pop_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+                .put(Type.INT,
+                        "23knuth_var_pop_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+                .put(Type.BIGINT,
+                        "23knuth_var_pop_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+                .put(Type.FLOAT,
+                        "23knuth_var_pop_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+                .put(Type.DOUBLE,
+                        "23knuth_var_pop_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+                .put(Type.DECIMALV2,
+                        "33decimalv2_knuth_var_pop_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+                .build();                
     public static final String HLL_HASH = "hll_hash";
     public static final String HLL_UNION = "hll_union";
 
@@ -1688,25 +1777,27 @@ public class FunctionSet<min_initIN9doris_udf12DecimalV2ValEEEvPNS2_15FunctionCo
                         prefix + STDDEV_INIT_SYMBOL.get(t),
                         prefix + STDDEV_UPDATE_SYMBOL.get(t),
                         prefix + STDDEV_MERGE_SYMBOL.get(t),
-                        null,
+                        null, prefix + STDDEV_POP_GET_VALUE_SYMBOL.get(t), prefix + STDDEV_REMOVE_SYMBOL.get(t),
                         prefix + STDDEV_POP_FINALIZE_SYMBOL.get(t),
-                        false, false, false));
+                        false, true, false));
+                        
                 addBuiltin(AggregateFunction.createBuiltin("stddev_samp",
                         Lists.newArrayList(t), STDDEV_RETTYPE_SYMBOL.get(t), Type.VARCHAR,
                         prefix + STDDEV_INIT_SYMBOL.get(t),
                         prefix + STDDEV_UPDATE_SYMBOL.get(t),
                         prefix + STDDEV_MERGE_SYMBOL.get(t),
-                        null,
+                        null, prefix + STDDEV_GET_VALUE_SYMBOL.get(t), prefix + STDDEV_REMOVE_SYMBOL.get(t),
                         prefix + STDDEV_FINALIZE_SYMBOL.get(t),
-                        false, false, false));
+                        false, true, false));
+
                 addBuiltin(AggregateFunction.createBuiltin("stddev_pop",
                         Lists.newArrayList(t), STDDEV_RETTYPE_SYMBOL.get(t), Type.VARCHAR,
                         prefix + STDDEV_INIT_SYMBOL.get(t),
                         prefix + STDDEV_UPDATE_SYMBOL.get(t),
                         prefix + STDDEV_MERGE_SYMBOL.get(t),
-                        null,
+                        null, prefix + STDDEV_POP_GET_VALUE_SYMBOL.get(t), prefix + STDDEV_REMOVE_SYMBOL.get(t),
                         prefix + STDDEV_POP_FINALIZE_SYMBOL.get(t),
-                        false, false, false));
+                        false, true, false));
 
                 //vec stddev stddev_samp stddev_pop
                 addBuiltin(AggregateFunction.createBuiltin("stddev",
@@ -1714,25 +1805,25 @@ public class FunctionSet<min_initIN9doris_udf12DecimalV2ValEEEvPNS2_15FunctionCo
                         prefix + STDDEV_INIT_SYMBOL.get(t),
                         prefix + STDDEV_UPDATE_SYMBOL.get(t),
                         prefix + STDDEV_MERGE_SYMBOL.get(t),
-                        null,
+                        null, null, null,
                         prefix + STDDEV_POP_FINALIZE_SYMBOL.get(t),
-                        false, false, false, true));
+                        false, true, false, true));
                 addBuiltin(AggregateFunction.createBuiltin("stddev_samp",
                         Lists.newArrayList(t), STDDEV_RETTYPE_SYMBOL.get(t), t,
                         prefix + STDDEV_INIT_SYMBOL.get(t),
                         prefix + STDDEV_UPDATE_SYMBOL.get(t),
                         prefix + STDDEV_MERGE_SYMBOL.get(t),
-                        null,
+                        null, null, null,
                         prefix + STDDEV_FINALIZE_SYMBOL.get(t),
-                        false, false, false, true));
+                        false, true, false, true));
                 addBuiltin(AggregateFunction.createBuiltin("stddev_pop",
                         Lists.newArrayList(t), STDDEV_RETTYPE_SYMBOL.get(t), t,
                         prefix + STDDEV_INIT_SYMBOL.get(t),
                         prefix + STDDEV_UPDATE_SYMBOL.get(t),
                         prefix + STDDEV_MERGE_SYMBOL.get(t),
-                        null,
+                        null, null, null,
                         prefix + STDDEV_POP_FINALIZE_SYMBOL.get(t),
-                        false, false, false, true));
+                        false, true, false, true));
                 
                 //vec: variance variance_samp var_samp variance_pop var_pop
                 addBuiltin(AggregateFunction.createBuiltin("variance",
@@ -1740,82 +1831,86 @@ public class FunctionSet<min_initIN9doris_udf12DecimalV2ValEEEvPNS2_15FunctionCo
                         prefix + STDDEV_INIT_SYMBOL.get(t),
                         prefix + STDDEV_UPDATE_SYMBOL.get(t),
                         prefix + STDDEV_MERGE_SYMBOL.get(t),
-                        null,
+                        null, null, null,
                         prefix + VAR_POP_FINALIZE_SYMBOL.get(t),
-                        false, false, false, true));
+                        false, true, false, true));
                 addBuiltin(AggregateFunction.createBuiltin("variance_pop",
                         Lists.newArrayList(t), STDDEV_RETTYPE_SYMBOL.get(t), t,
                         prefix + STDDEV_INIT_SYMBOL.get(t),
                         prefix + STDDEV_UPDATE_SYMBOL.get(t),
                         prefix + STDDEV_MERGE_SYMBOL.get(t),
-                        null,
+                        null, null, null,
                         prefix + VAR_POP_FINALIZE_SYMBOL.get(t),
-                        false, false, false, true));
+                        false, true, false, true));
                 addBuiltin(AggregateFunction.createBuiltin("var_pop",
                         Lists.newArrayList(t), STDDEV_RETTYPE_SYMBOL.get(t), t,
                         prefix + STDDEV_INIT_SYMBOL.get(t),
                         prefix + STDDEV_UPDATE_SYMBOL.get(t),
                         prefix + STDDEV_MERGE_SYMBOL.get(t),
-                        null,
+                        null, null, null,
                         prefix + VAR_POP_FINALIZE_SYMBOL.get(t),
-                        false, false, false, true));
+                        false, true, false, true));
                 addBuiltin(AggregateFunction.createBuiltin("variance_samp",
                         Lists.newArrayList(t), STDDEV_RETTYPE_SYMBOL.get(t), t,
                         prefix + STDDEV_INIT_SYMBOL.get(t),
                         prefix + STDDEV_UPDATE_SYMBOL.get(t),
                         prefix + STDDEV_MERGE_SYMBOL.get(t),
-                        null,
+                        null, null, null,
                         prefix + VAR_FINALIZE_SYMBOL.get(t),
-                        false, false, false, true));
+                        false, true, false, true));
                 addBuiltin(AggregateFunction.createBuiltin("var_samp",
                         Lists.newArrayList(t), STDDEV_RETTYPE_SYMBOL.get(t), t,
                         prefix + STDDEV_INIT_SYMBOL.get(t),
                         prefix + STDDEV_UPDATE_SYMBOL.get(t),
                         prefix + STDDEV_MERGE_SYMBOL.get(t),
-                        null,
+                        null, null, null,
                         prefix + VAR_FINALIZE_SYMBOL.get(t),
-                        false, false, false, true));                        
+                        false, true, false, true));                        
 
                 addBuiltin(AggregateFunction.createBuiltin("variance",
                         Lists.newArrayList(t), STDDEV_RETTYPE_SYMBOL.get(t), Type.VARCHAR,
                         prefix + STDDEV_INIT_SYMBOL.get(t),
                         prefix + STDDEV_UPDATE_SYMBOL.get(t),
                         prefix + STDDEV_MERGE_SYMBOL.get(t),
-                        null,
+                        null, prefix + VAR_POP_GET_VALUE_SYMBOL.get(t), prefix + STDDEV_REMOVE_SYMBOL.get(t),
                         prefix + VAR_POP_FINALIZE_SYMBOL.get(t),
-                        false, false, false));
+                        false, true, false));
+
                 addBuiltin(AggregateFunction.createBuiltin("variance_samp",
                         Lists.newArrayList(t), STDDEV_RETTYPE_SYMBOL.get(t), Type.VARCHAR,
                         prefix + STDDEV_INIT_SYMBOL.get(t),
                         prefix + STDDEV_UPDATE_SYMBOL.get(t),
                         prefix + STDDEV_MERGE_SYMBOL.get(t),
-                        null,
+                        null, prefix + VAR_GET_VALUE_SYMBOL.get(t), prefix + STDDEV_REMOVE_SYMBOL.get(t),
                         prefix + VAR_FINALIZE_SYMBOL.get(t),
-                        false, false, false));
+                        false, true, false));
+
                 addBuiltin(AggregateFunction.createBuiltin("var_samp",
                         Lists.newArrayList(t), STDDEV_RETTYPE_SYMBOL.get(t), Type.VARCHAR,
                         prefix + STDDEV_INIT_SYMBOL.get(t),
                         prefix + STDDEV_UPDATE_SYMBOL.get(t),
                         prefix + STDDEV_MERGE_SYMBOL.get(t),
-                        null,
+                        null, prefix + VAR_GET_VALUE_SYMBOL.get(t), prefix + STDDEV_REMOVE_SYMBOL.get(t),
                         prefix + VAR_FINALIZE_SYMBOL.get(t),
-                        false, false, false));
+                        false, true, false));
+
                 addBuiltin(AggregateFunction.createBuiltin("variance_pop",
                         Lists.newArrayList(t), STDDEV_RETTYPE_SYMBOL.get(t), Type.VARCHAR,
                         prefix + STDDEV_INIT_SYMBOL.get(t),
                         prefix + STDDEV_UPDATE_SYMBOL.get(t),
                         prefix + STDDEV_MERGE_SYMBOL.get(t),
-                        null,
+                        null, prefix + VAR_POP_GET_VALUE_SYMBOL.get(t), prefix + STDDEV_REMOVE_SYMBOL.get(t),
                         prefix + VAR_POP_FINALIZE_SYMBOL.get(t),
-                        false, false, false));
+                        false, true, false));
+
                 addBuiltin(AggregateFunction.createBuiltin("var_pop",
                         Lists.newArrayList(t), STDDEV_RETTYPE_SYMBOL.get(t), Type.VARCHAR,
                         prefix + STDDEV_INIT_SYMBOL.get(t),
                         prefix + STDDEV_UPDATE_SYMBOL.get(t),
                         prefix + STDDEV_MERGE_SYMBOL.get(t),
-                        null,
+                        null, prefix + VAR_POP_GET_VALUE_SYMBOL.get(t), prefix + STDDEV_REMOVE_SYMBOL.get(t),
                         prefix + VAR_POP_FINALIZE_SYMBOL.get(t),
-                        false, false, false));
+                        false, true, false));
             }
         }
 
@@ -2065,7 +2160,7 @@ public class FunctionSet<min_initIN9doris_udf12DecimalV2ValEEEvPNS2_15FunctionCo
                 prefix + "16percentile_mergeEPN9doris_udf15FunctionContextERKNS1_9StringValEPS4_",
                 prefix + "20percentile_serializeEPN9doris_udf15FunctionContextERKNS1_9StringValE",
                 prefix + "19percentile_finalizeEPN9doris_udf15FunctionContextERKNS1_9StringValE",
-                false, false, false, true));
+                false, true, false, true));
 
         addBuiltin(AggregateFunction.createBuiltin("percentile_approx",
                 Lists.<Type>newArrayList(Type.DOUBLE, Type.DOUBLE), Type.DOUBLE, Type.VARCHAR,
@@ -2074,7 +2169,7 @@ public class FunctionSet<min_initIN9doris_udf12DecimalV2ValEEEvPNS2_15FunctionCo
                 prefix + "23percentile_approx_mergeEPN9doris_udf15FunctionContextERKNS1_9StringValEPS4_",
                 prefix + "27percentile_approx_serializeEPN9doris_udf15FunctionContextERKNS1_9StringValE",
                 prefix + "26percentile_approx_finalizeEPN9doris_udf15FunctionContextERKNS1_9StringValE",
-                false, false, false, true));
+                false, true, false, true));
 
         addBuiltin(AggregateFunction.createBuiltin("percentile_approx",
                 Lists.<Type>newArrayList(Type.DOUBLE, Type.DOUBLE, Type.DOUBLE), Type.DOUBLE, Type.VARCHAR,
@@ -2083,7 +2178,7 @@ public class FunctionSet<min_initIN9doris_udf12DecimalV2ValEEEvPNS2_15FunctionCo
                 prefix + "23percentile_approx_mergeEPN9doris_udf15FunctionContextERKNS1_9StringValEPS4_",
                 prefix + "27percentile_approx_serializeEPN9doris_udf15FunctionContextERKNS1_9StringValE",
                 prefix + "26percentile_approx_finalizeEPN9doris_udf15FunctionContextERKNS1_9StringValE",
-                false, false, false, true)); 
+                false, true, false, true)); 
 
         // Avg
         // TODO: switch to CHAR(sizeof(AvgIntermediateType) when that becomes available
diff --git a/regression-test/data/correctness/test_select_stddev_variance_window.out b/regression-test/data/correctness/test_select_stddev_variance_window.out
new file mode 100644
index 0000000000..b3a9ee95e5
--- /dev/null
+++ b/regression-test/data/correctness/test_select_stddev_variance_window.out
@@ -0,0 +1,1021 @@
+-- This file is automatically generated. You should know what you did if you want to edit this
+-- !select_default --
+1	10887.581821431579
+2	19879.492787402174
+3	19879.492787402174
+4	19879.492787402174
+5	10887.581821431579
+6	10887.581821431579
+7	19879.492787402174
+8	10887.581821431579
+9	11616.726911608488
+10	21153.67606592388
+11	12502.185191397542
+12	22705.953345616945
+13	24652.592905412606
+14	23184.696218626632
+15	751.5664890746526
+
+-- !select_default --
+1	\N
+2	\N
+3	0.0
+4	1.5
+5	0.0
+6	2.0
+7	2.0548046676563256
+8	14509.831241839674
+9	14935.247526126464
+10	16384.606949478188
+11	14933.950939609607
+12	16385.07833365468
+13	26770.601404442812
+14	26770.60140444281
+15	817.8872511266792
+
+-- !select_default --
+1	2.0
+2	1.5
+3	2.0548046676563256
+4	15049.645234606029
+5	14509.831241839674
+6	13596.522128838684
+7	13902.500120481925
+8	12502.835735944067
+9	12502.835735944067
+10	20746.59631264849
+11	12502.185191397542
+12	24751.734420036104
+13	24652.592905412606
+14	23184.696218626632
+15	751.5664890746526
+
+-- !select_default --
+1	0.0
+2	0.0
+3	0.0
+4	0.0
+5	0.0
+6	0.0
+7	0.0
+8	0.0
+9	0.0
+10	0.0
+11	0.0
+12	0.0
+13	0.0
+14	0.0
+15	0.0
+
+-- !select_default --
+1	10887.581821431579
+2	19879.492787402174
+3	21153.67606592388
+4	22705.953345616945
+5	11616.726911608488
+6	12502.185191397542
+7	24652.592905412606
+8	751.5664890746526
+9	1.247219128924647
+10	23184.696218626632
+11	1.5
+12	26754.41351752392
+13	16511.0
+14	0.0
+15	0.0
+
+-- !select_default --
+1	0.0
+2	0.0
+3	1.5
+4	2.0548046676563256
+5	2.0
+6	14509.831241839674
+7	15049.645234606029
+8	13596.522128838684
+9	12502.835735944067
+10	13902.500120481925
+11	11616.935190583712
+12	18941.26337230146
+13	21209.57875727909
+14	19879.492787402174
+15	10887.581821431579
+
+-- !select_default --
+1	11759.932436232868
+2	21252.07172380075
+3	21252.07172380075
+4	21252.07172380075
+5	11759.932436232868
+6	11759.932436232868
+7	21252.07172380075
+8	11759.932436232868
+9	12725.486747730582
+10	22848.58156689486
+11	13977.867977628062
+12	24873.125674108593
+13	27562.436779065818
+14	26771.381205807567
+15	867.8342295623053
+
+-- !select_default --
+1	\N
+2	\N
+3	\N
+4	2.1213203435596424
+5	\N
+6	2.8284271247461903
+7	2.5166114784235836
+8	17770.84139820059
+9	18291.867810587304
+10	20066.963331140396
+11	18290.27982290047
+12	20067.540656493013
+13	32787.156774159805
+14	32787.156774159805
+15	1001.703216193965
+
+-- !select_default --
+1	2.8284271247461903
+2	2.1213203435596424
+3	2.5166114784235836
+4	17377.83345481632
+5	17770.84139820059
+6	15699.911422255434
+7	15543.467663298301
+8	13978.595308542272
+9	13978.595308542272
+10	23195.39982841425
+11	13977.86797762806
+12	27673.28036211103
+13	27562.436779065814
+14	26771.381205807567
+15	867.8342295623053
+
+-- !select_default --
+1	\N
+2	\N
+3	\N
+4	\N
+5	\N
+6	\N
+7	\N
+8	\N
+9	\N
+10	\N
+11	\N
+12	\N
+13	\N
+14	\N
+15	\N
+
+-- !select_default --
+1	11759.932436232868
+2	21252.07172380075
+3	22848.58156689486
+4	24873.125674108593
+5	12725.486747730582
+6	13977.867977628062
+7	27562.436779065818
+8	867.8342295623053
+9	1.5275252316519468
+10	26771.381205807567
+11	2.1213203435596424
+12	32767.330742677226
+13	23350.08012834217
+14	\N
+15	\N
+
+-- !select_default --
+1	\N
+2	\N
+3	2.1213203435596424
+4	2.5166114784235836
+5	2.8284271247461903
+6	17770.84139820059
+7	17377.83345481632
+8	15699.911422255434
+9	13978.595308542272
+10	15543.467663298301
+11	12725.71490591655
+12	20749.114433311766
+13	22908.963374730905
+14	21252.071723800753
+15	11759.932436232868
+
+-- !select_default --
+1	1.1853943791836736E8
+2	3.95194233484375E8
+3	3.95194233484375E8
+4	3.95194233484375E8
+5	1.1853943791836736E8
+6	1.1853943791836736E8
+7	3.95194233484375E8
+8	1.1853943791836736E8
+9	1.349483441388889E8
+10	4.474780111020408E8
+11	1.5630463456E8
+12	5.155603173333333E8
+13	6.0775033696E8
+14	5.3753013875E8
+15	564852.1875
+
+-- !select_default --
+1	\N
+2	\N
+3	0.0
+4	2.25
+5	0.0
+6	4.0
+7	4.222222222222222
+8	2.1053520266666666E8
+9	2.2306161866666666E8
+10	2.684553448888889E8
+11	2.2302289066666666E8
+12	2.68470792E8
+13	7.166650995555555E8
+14	7.166650995555553E8
+15	668939.5555555556
+
+-- !select_default --
+1	4.0
+2	2.25
+3	4.222222222222222
+4	2.2649182168749997E8
+5	2.1053520266666666E8
+6	1.84865414E8
+7	1.9327950959999996E8
+8	1.5632090144E8
+9	1.5632090144E8
+10	4.3042125855999994E8
+11	1.5630463456E8
+12	6.126483568E8
+13	6.077503369599999E8
+14	5.3753013875E8
+15	564852.1875
+
+-- !select_default --
+1	0.0
+2	0.0
+3	0.0
+4	0.0
+5	0.0
+6	0.0
+7	0.0
+8	0.0
+9	0.0
+10	0.0
+11	0.0
+12	0.0
+13	0.0
+14	0.0
+15	0.0
+
+-- !select_default --
+1	1.1853943791836736E8
+2	3.95194233484375E8
+3	4.474780111020408E8
+4	5.155603173333333E8
+5	1.349483441388889E8
+6	1.5630463456E8
+7	6.0775033696E8
+8	564852.1875
+9	1.5555555555555556
+10	5.3753013875E8
+11	2.25
+12	7.157986426666666E8
+13	2.72613121E8
+14	0.0
+15	0.0
+
+-- !select_default --
+1	0.0
+2	0.0
+3	2.25
+4	4.222222222222222
+5	4.0
+6	2.1053520266666666E8
+7	2.2649182168749997E8
+8	1.84865414E8
+9	1.5632090144E8
+10	1.9327950959999996E8
+11	1.3495318322222224E8
+12	3.587714581388889E8
+13	4.498462310612245E8
+14	3.9519423348437506E8
+15	1.1853943791836736E8
+
+-- !select_default --
+1	1.382960109047619E8
+2	4.516505525535714E8
+3	4.516505525535714E8
+4	4.516505525535714E8
+5	1.382960109047619E8
+6	1.382960109047619E8
+7	4.516505525535714E8
+8	1.382960109047619E8
+9	1.6193801296666667E8
+10	5.2205767961904764E8
+11	1.9538079320000002E8
+12	6.186723808E8
+13	7.596879212E8
+14	7.167068516666666E8
+15	753136.25
+
+-- !select_default --
+1	\N
+2	\N
+3	\N
+4	4.5
+5	\N
+6	8.0
+7	6.333333333333334
+8	3.15802804E8
+9	3.34592428E8
+10	4.026830173333333E8
+11	3.34534336E8
+12	4.02706188E8
+13	1.0749976493333333E9
+14	1.074997649333333E9
+15	1003409.3333333334
+
+-- !select_default --
+1	8.0
+2	4.5
+3	6.333333333333334
+4	3.019890955833333E8
+5	3.15802804E8
+6	2.4648721866666666E8
+7	2.4159938699999997E8
+8	1.954011268E8
+9	1.954011268E8
+10	5.380265731999999E8
+11	1.953807932E8
+12	7.658104459999999E8
+13	7.596879211999999E8
+14	7.167068516666666E8
+15	753136.25
+
+-- !select_default --
+1	\N
+2	\N
+3	\N
+4	\N
+5	\N
+6	\N
+7	\N
+8	\N
+9	\N
+10	\N
+11	\N
+12	\N
+13	\N
+14	\N
+15	\N
+
+-- !select_default --
+1	1.382960109047619E8
+2	4.516505525535714E8
+3	5.2205767961904764E8
+4	6.186723808E8
+5	1.6193801296666667E8
+6	1.9538079320000002E8
+7	7.596879212E8
+8	753136.25
+9	2.3333333333333335
+10	7.167068516666666E8
+11	4.5
+12	1.073697964E9
+13	5.45226242E8
+14	\N
+15	\N
+
+-- !select_default --
+1	\N
+2	\N
+3	4.5
+4	6.333333333333334
+5	8.0
+6	3.15802804E8
+7	3.019890955833333E8
+8	2.4648721866666666E8
+9	1.954011268E8
+10	2.4159938699999997E8
+11	1.6194381986666667E8
+12	4.305257497666667E8
+13	5.2482060290476197E8
+14	4.516505525535715E8
+15	1.382960109047619E8
+
+-- !select_default --
+1	10887.581821431579
+2	19879.492787402174
+3	19879.492787402174
+4	19879.492787402174
+5	10887.581821431579
+6	10887.581821431579
+7	19879.492787402174
+8	10887.581821431579
+9	11616.726911608488
+10	21153.67606592388
+11	12502.185191397542
+12	22705.953345616945
+13	24652.592905412606
+14	23184.696218626632
+15	751.5664890746526
+
+-- !select_default --
+1	\N
+2	\N
+3	0.0
+4	1.5
+5	0.0
+6	2.0
+7	2.0548046676563256
+8	14509.831241839674
+9	14935.247526126464
+10	16384.606949478188
+11	14933.950939609607
+12	16385.07833365468
+13	26770.601404442812
+14	26770.601404442812
+15	817.8872511266792
+
+-- !select_default --
+1	2.0
+2	1.5
+3	2.0548046676563256
+4	15049.645234606029
+5	14509.831241839674
+6	13596.522128838684
+7	13902.500120481925
+8	12502.835735944067
+9	12502.835735944067
+10	20746.596312648493
+11	12502.185191397542
+12	24751.734420036104
+13	24652.592905412606
+14	23184.696218626632
+15	751.5664890746526
+
+-- !select_default --
+1	0.0
+2	0.0
+3	0.0
+4	0.0
+5	0.0
+6	0.0
+7	0.0
+8	0.0
+9	0.0
+10	0.0
+11	0.0
+12	0.0
+13	0.0
+14	0.0
+15	0.0
+
+-- !select_default --
+1	10887.581821431579
+2	19879.492787402174
+3	21153.67606592388
+4	22705.953345616945
+5	11616.726911608488
+6	12502.185191397542
+7	24652.592905412606
+8	751.5664890746526
+9	1.247219128924647
+10	23184.696218626632
+11	1.5
+12	26754.41351752392
+13	16511.0
+14	0.0
+15	0.0
+
+-- !select_default --
+1	0.0
+2	0.0
+3	1.5
+4	2.0548046676563256
+5	2.0
+6	14509.831241839674
+7	15049.645234606029
+8	13596.522128838684
+9	12502.835735944067
+10	13902.500120481925
+11	11616.935190583712
+12	18941.26337230146
+13	21209.57875727909
+14	19879.492787402174
+15	10887.581821431579
+
+-- !select_default --
+1	11759.932436232868
+2	21252.07172380075
+3	21252.07172380075
+4	21252.07172380075
+5	11759.932436232868
+6	11759.932436232868
+7	21252.07172380075
+8	11759.932436232868
+9	12725.486747730582
+10	22848.58156689486
+11	13977.867977628062
+12	24873.125674108593
+13	27562.436779065818
+14	26771.381205807567
+15	867.8342295623053
+
+-- !select_default --
+1	\N
+2	\N
+3	\N
+4	2.1213203435596424
+5	\N
+6	2.8284271247461903
+7	2.5166114784235836
+8	17770.84139820059
+9	18291.867810587304
+10	20066.963331140396
+11	18290.27982290047
+12	20067.540656493013
+13	32787.156774159805
+14	32787.156774159805
+15	1001.703216193965
+
+-- !select_default --
+1	2.8284271247461903
+2	2.1213203435596424
+3	2.5166114784235836
+4	17377.83345481632
+5	17770.84139820059
+6	15699.911422255434
+7	15543.467663298301
+8	13978.595308542272
+9	13978.595308542272
+10	23195.399828414254
+11	13977.86797762806
+12	27673.28036211103
+13	27562.436779065818
+14	26771.381205807567
+15	867.8342295623053
+
+-- !select_default --
+1	\N
+2	\N
+3	\N
+4	\N
+5	\N
+6	\N
+7	\N
+8	\N
+9	\N
+10	\N
+11	\N
+12	\N
+13	\N
+14	\N
+15	\N
+
+-- !select_default --
+1	11759.932436232868
+2	21252.07172380075
+3	22848.58156689486
+4	24873.125674108593
+5	12725.486747730582
+6	13977.867977628062
+7	27562.436779065818
+8	867.8342295623053
+9	1.5275252316519468
+10	26771.381205807567
+11	2.1213203435596424
+12	32767.330742677226
+13	23350.08012834217
+14	\N
+15	\N
+
+-- !select_default --
+1	\N
+2	\N
+3	2.1213203435596424
+4	2.5166114784235836
+5	2.8284271247461903
+6	17770.84139820059
+7	17377.83345481632
+8	15699.911422255434
+9	13978.595308542272
+10	15543.467663298301
+11	12725.71490591655
+12	20749.114433311766
+13	22908.963374730905
+14	21252.071723800753
+15	11759.932436232868
+
+-- !select_default --
+1	1.1853943791836736E8
+2	3.95194233484375E8
+3	3.95194233484375E8
+4	3.95194233484375E8
+5	1.1853943791836736E8
+6	1.1853943791836736E8
+7	3.95194233484375E8
+8	1.1853943791836736E8
+9	1.349483441388889E8
+10	4.474780111020408E8
+11	1.5630463456E8
+12	5.155603173333333E8
+13	6.0775033696E8
+14	5.3753013875E8
+15	564852.1875
+
+-- !select_default --
+1	\N
+2	\N
+3	0.0
+4	2.25
+5	0.0
+6	4.0
+7	4.222222222222222
+8	2.1053520266666666E8
+9	2.2306161866666666E8
+10	2.684553448888889E8
+11	2.2302289066666666E8
+12	2.68470792E8
+13	7.166650995555555E8
+14	7.166650995555555E8
+15	668939.5555555556
+
+-- !select_default --
+1	4.0
+2	2.25
+3	4.222222222222222
+4	2.2649182168749997E8
+5	2.1053520266666666E8
+6	1.84865414E8
+7	1.9327950959999996E8
+8	1.5632090144E8
+9	1.5632090144E8
+10	4.3042125856000006E8
+11	1.5630463456E8
+12	6.126483568E8
+13	6.0775033696E8
+14	5.3753013875E8
+15	564852.1875
+
+-- !select_default --
+1	0.0
+2	0.0
+3	0.0
+4	0.0
+5	0.0
+6	0.0
+7	0.0
+8	0.0
+9	0.0
+10	0.0
+11	0.0
+12	0.0
+13	0.0
+14	0.0
+15	0.0
+
+-- !select_default --
+1	1.1853943791836736E8
+2	3.95194233484375E8
+3	4.474780111020408E8
+4	5.155603173333333E8
+5	1.349483441388889E8
+6	1.5630463456E8
+7	6.0775033696E8
+8	564852.1875
+9	1.5555555555555556
+10	5.3753013875E8
+11	2.25
+12	7.157986426666666E8
+13	2.72613121E8
+14	0.0
+15	0.0
+
+-- !select_default --
+1	0.0
+2	0.0
+3	2.25
+4	4.222222222222222
+5	4.0
+6	2.1053520266666666E8
+7	2.2649182168749997E8
+8	1.84865414E8
+9	1.5632090144E8
+10	1.9327950959999996E8
+11	1.3495318322222224E8
+12	3.587714581388889E8
+13	4.498462310612245E8
+14	3.9519423348437506E8
+15	1.1853943791836736E8
+
+-- !select_default --
+1	1.382960109047619E8
+2	4.516505525535714E8
+3	4.516505525535714E8
+4	4.516505525535714E8
+5	1.382960109047619E8
+6	1.382960109047619E8
+7	4.516505525535714E8
+8	1.382960109047619E8
+9	1.6193801296666667E8
+10	5.2205767961904764E8
+11	1.9538079320000002E8
+12	6.186723808E8
+13	7.596879212E8
+14	7.167068516666666E8
+15	753136.25
+
+-- !select_default --
+1	\N
+2	\N
+3	\N
+4	4.5
+5	\N
+6	8.0
+7	6.333333333333334
+8	3.15802804E8
+9	3.34592428E8
+10	4.026830173333333E8
+11	3.34534336E8
+12	4.02706188E8
+13	1.0749976493333333E9
+14	1.0749976493333333E9
+15	1003409.3333333334
+
+-- !select_default --
+1	8.0
+2	4.5
+3	6.333333333333334
+4	3.019890955833333E8
+5	3.15802804E8
+6	2.4648721866666666E8
+7	2.4159938699999997E8
+8	1.954011268E8
+9	1.954011268E8
+10	5.380265732E8
+11	1.953807932E8
+12	7.65810446E8
+13	7.596879212E8
+14	7.167068516666666E8
+15	753136.25
+
+-- !select_default --
+1	\N
+2	\N
+3	\N
+4	\N
+5	\N
+6	\N
+7	\N
+8	\N
+9	\N
+10	\N
+11	\N
+12	\N
+13	\N
+14	\N
+15	\N
+
+-- !select_default --
+1	1.382960109047619E8
+2	4.516505525535714E8
+3	5.2205767961904764E8
+4	6.186723808E8
+5	1.6193801296666667E8
+6	1.9538079320000002E8
+7	7.596879212E8
+8	753136.25
+9	2.3333333333333335
+10	7.167068516666666E8
+11	4.5
+12	1.073697964E9
+13	5.45226242E8
+14	\N
+15	\N
+
+-- !select_default --
+1	\N
+2	\N
+3	4.5
+4	6.333333333333334
+5	8.0
+6	3.15802804E8
+7	3.019890955833333E8
+8	2.4648721866666666E8
+9	1.954011268E8
+10	2.4159938699999997E8
+11	1.6194381986666667E8
+12	4.305257497666667E8
+13	5.2482060290476197E8
+14	4.516505525535715E8
+15	1.382960109047619E8
+
+-- !select_default --
+1	1991.8000000000002
+2	1991.0
+3	1991.0
+4	1991.0
+5	1991.8000000000002
+6	1991.8000000000002
+7	1991.0
+8	1991.8000000000002
+9	1992.0
+10	1991.0
+11	8147.0000000000055
+12	1991.0
+13	8146.200000000006
+14	14301.40000000001
+15	1991.4
+
+-- !select_default --
+1	\N
+2	\N
+3	1986.0
+4	1988.4
+5	1989.0
+6	1988.1999999999998
+7	1990.1999999999998
+8	20455.800000000003
+9	20454.200000000004
+10	1990.1999999999998
+11	20456.600000000006
+12	1991.0
+13	20456.600000000006
+14	20456.600000000006
+15	1990.1999999999998
+
+-- !select_default --
+1	1988.1999999999998
+2	1988.4
+3	1990.1999999999998
+4	1989.7999999999997
+5	20455.800000000003
+6	14300.200000000012
+7	1991.0
+8	8146.200000000006
+9	8146.200000000006
+10	8146.200000000006
+11	8147.0000000000055
+12	8146.200000000006
+13	8146.200000000006
+14	14301.40000000001
+15	1991.4
+
+-- !select_default --
+1	1989.0
+2	1986.0
+3	1989.0
+4	1991.0
+5	1985.0
+6	32767.0
+7	-32767.0
+8	255.0
+9	1991.0
+10	1991.0
+11	1989.0
+12	32767.0
+13	-32767.0
+14	255.0
+15	1992.0
+
+-- !select_default --
+1	1991.8000000000002
+2	1991.0
+3	1991.0
+4	1991.0
+5	1992.0
+6	8147.0000000000055
+7	8146.200000000006
+8	1991.4
+9	1991.6000000000001
+10	14301.40000000001
+11	1991.4
+12	19762.200000000004
+13	-6349.399999999999
+14	255.0
+15	1992.0
+
+-- !select_default --
+1	1989.0
+2	1986.0
+3	1988.4
+4	1990.1999999999998
+5	1988.1999999999998
+6	20455.800000000003
+7	1989.7999999999997
+8	14300.200000000012
+9	8146.200000000006
+10	1991.0
+11	1991.0
+12	1991.0
+13	1991.0
+14	1991.0
+15	1991.8000000000002
+
+-- !select_default --
+1	5069.4970703125
+2	1991.0
+3	1991.0
+4	1991.0
+5	5069.4970703125
+6	5069.4970703125
+7	1991.0
+8	5069.4970703125
+9	11224.505859375
+10	5068.5966796875
+11	17379.5
+12	11223.8056640625
+13	17379.0
+14	23534.203125
+15	1991.7000732421875
+
+-- !select_default --
+1	\N
+2	\N
+3	1986.0
+4	1989.0
+5	1989.0
+6	1989.0
+7	1990.7999267578125
+8	29689.203125
+9	29688.802734375
+10	1990.7999267578125
+11	29689.40234375
+12	1991.0
+13	29689.40234375
+14	29689.40234375
+15	1990.7999267578125
+
+-- !select_default --
+1	1989.0
+2	1989.0
+3	1990.7999267578125
+4	1990.39990234375
+5	29689.203125
+6	23533.6015625
+7	1991.0
+8	17379.0
+9	17379.0
+10	17379.0
+11	17379.5
+12	17379.0
+13	17379.0
+14	23534.203125
+15	1991.7000732421875
+
+-- !select_default --
+1	1989.0
+2	1986.0
+3	1989.0
+4	1991.0
+5	1985.0
+6	32767.0
+7	-32767.0
+8	255.0
+9	1991.0
+10	1991.0
+11	1989.0
+12	32767.0
+13	-32767.0
+14	255.0
+15	1992.0
+
+-- !select_default --
+1	5069.4970703125
+2	1991.0
+3	5068.5966796875
+4	11223.8056640625
+5	11224.505859375
+6	17379.5
+7	17379.0
+8	1991.7000732421875
+9	1991.9000244140625
+10	23534.203125
+11	1992.0
+12	29515.802734375
+13	255.0
+14	255.0
+15	1992.0
+
+-- !select_default --
+1	1989.0
+2	1986.0
+3	1989.0
+4	1990.7999267578125
+5	1989.0
+6	29689.203125
+7	1990.39990234375
+8	23533.6015625
+9	17379.0
+10	1991.0
+11	11223.8056640625
+12	11223.8056640625
+13	5068.5966796875
+14	1991.0
+15	5069.4970703125
+
diff --git a/regression-test/data/correctness/test_stddev_variance_window.csv b/regression-test/data/correctness/test_stddev_variance_window.csv
new file mode 100644
index 0000000000..20c6349bba
--- /dev/null
+++ b/regression-test/data/correctness/test_stddev_variance_window.csv
@@ -0,0 +1,15 @@
+6	32767	3021	123456	604587.000	true	2014-11-11	2015-03-13 12:36:38	yanhuiacng01	0.1	80699
+10	1991	5014	9223372036854775807	-258.369	false	2015-04-02	2013-04-02 15:16:52	wangyu14	-123456.54	0.235
+12	32767	-2147483647	9223372036854775807	243.325	false	1991-08-11	2013-04-02 15:16:52	liuyuantuo	-564.898	3.1415927
+1	1989	1001	11011902	123.123	true	1989-03-21	1989-03-21 13:00:00	wangjing04	0.1	6.333
+2	1986	1001	11011903	1243.500	false	1901-12-31	1989-03-21 13:00:00	wangyu14	20.268	789.25
+4	1991	3021	-11011907	243243.325	false	3124-10-10	2015-03-13 10:30:00	yanhuicang01	2.06	-0.001
+5	1985	5014	-11011903	243.325	true	2015-01-01	2015-03-13 12:36:38	duyunkai@123	-0	-365
+15	1992	3021	11011920	0.000	true	9999-12-12	2015-04-02 00:00:00	 	3.141592653	20.456
+3	1989	1002	11011905	24453.325	false	2012-03-14	2000-01-01 00:00:00	yuanyuan06	78945	3654
+7	-32767	1002	7210457	3.141	false	1988-03-21	1901-01-01 00:00:00	jingyong	0	6058
+8	255	2147483647	11011920	-0.123	true	1989-03-21	9999-11-11 12:12:00	wangjing05	987456.123	12.14
+9	1991	-2147483647	11011902	-654.654	true	1991-08-11	1989-03-21 13:11:00	wangjing04	0	69.123
+11	1989	25699	-9223372036854775807	0.666	true	2015-04-02	1989-03-21 13:11:00	yuanyuan06	-987.001	4.336
+13	-32767	2147483647	-9223372036854775807	100.001	false	2015-04-02	2015-04-02 00:00:00	weike01	123.456	3.1415927
+14	255	103	11011902	0.000	false	2015-04-02	2015-04-02 00:00:00		3.141592654	2.036
diff --git a/regression-test/suites/correctness/test_select_stddev_variance_window.groovy b/regression-test/suites/correctness/test_select_stddev_variance_window.groovy
new file mode 100644
index 0000000000..74580523ae
--- /dev/null
+++ b/regression-test/suites/correctness/test_select_stddev_variance_window.groovy
@@ -0,0 +1,155 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+suite("test_select_stddev_variance_window") {
+    def tableName = "stddev_variance_window"
+
+    sql """ DROP TABLE IF EXISTS ${tableName} """
+    sql """
+            CREATE TABLE `${tableName}` (
+            `k1` tinyint(4) NULL COMMENT "",
+            `k2` smallint(6) NULL COMMENT "",
+            `k3` int(11) NULL COMMENT "",
+            `k4` bigint(20) NULL COMMENT "",
+            `k5` decimal(9, 3) NULL COMMENT "",
+            `k6` char(5) NULL COMMENT "",
+            `k10` date NULL COMMENT "",
+            `k11` datetime NULL COMMENT "",
+            `k7` varchar(20) NULL COMMENT "",
+            `k8` double NULL COMMENT "",
+            `k9` float NULL COMMENT ""
+            ) ENGINE=OLAP
+            DUPLICATE KEY(`k1`, `k2`, `k3`, `k4`, `k5`, `k6`, `k10`, `k11`, `k7`)
+            COMMENT "OLAP"
+            DISTRIBUTED BY HASH(`k1`) BUCKETS 5
+            PROPERTIES (
+            "replication_allocation" = "tag.location.default: 1",
+            "in_memory" = "false",
+            "storage_format" = "V2"
+            );
+        """
+    streamLoad {
+        table tableName
+
+        // default label is UUID:
+        // set 'label' UUID.randomUUID().toString()
+
+        // default column_separator is specify in doris fe config, usually is '\t'.
+        // this line change to ','
+        set 'column_separator', '\t'
+
+        // relate to ${DORIS_HOME}/regression-test/data/demo/streamload_input.csv.
+        // also, you can stream load a http stream, e.g. http://xxx/some.csv
+        file 'test_stddev_variance_window.csv'
+
+        time 10000 // limit inflight 10s
+
+        // stream load action will check result, include Success status, and NumberTotalRows == NumberLoadedRows
+
+        // if declared a check callback, the default check condition will ignore.
+        // So you must check all condition
+        check { result, exception, startTime, endTime ->
+            if (exception != null) {
+                throw exception
+            }
+            log.info("Stream load result: ${result}".toString())
+            def json = parseJson(result)
+            assertEquals("success", json.Status.toLowerCase())
+            assertEquals(json.NumberTotalRows, json.NumberLoadedRows)
+            assertTrue(json.NumberLoadedRows > 0 && json.LoadBytes > 0)
+        }
+    }
+    // Not Vectorized
+    sql """ set enable_vectorized_engine = false """
+
+    qt_select_default  "select k1, stddev_pop(k2) over (partition by k6 order by k1 rows between 3 preceding and unbounded following) from  ${tableName} order by k1;"
+    qt_select_default  "select k1, stddev_pop(k2) over (partition by k6 order by k1 rows between 3 preceding and 1 preceding) from   ${tableName} order by k1;"
+    qt_select_default  "select k1, stddev_pop(k2) over (partition by k6 order by k1 rows between 3 preceding and 1 following) from   ${tableName} order by k1;"
+    qt_select_default  "select k1, stddev_pop(k2) over (partition by k6 order by k1 rows between current row and current row) from   ${tableName} order by k1;"
+    qt_select_default  "select k1, stddev_pop(k2) over (partition by k6 order by k1 rows between current row and unbounded following) from  ${tableName} order by k1;"
+    qt_select_default  "select k1, stddev_pop(k2) over (partition by k6 order by k1) from  ${tableName} order by k1;"
+
+    qt_select_default  "select k1, stddev_samp(k2) over (partition by k6 order by k1 rows between 3 preceding and unbounded following) from  ${tableName} order by k1;"
+    qt_select_default  "select k1, stddev_samp(k2) over (partition by k6 order by k1 rows between 3 preceding and 1 preceding) from   ${tableName} order by k1;"
+    qt_select_default  "select k1, stddev_samp(k2) over (partition by k6 order by k1 rows between 3 preceding and 1 following) from   ${tableName} order by k1;"
+    qt_select_default  "select k1, stddev_samp(k2) over (partition by k6 order by k1 rows between current row and current row) from   ${tableName} order by k1;"
+    qt_select_default  "select k1, stddev_samp(k2) over (partition by k6 order by k1 rows between current row and unbounded following) from  ${tableName} order by k1;"
+    qt_select_default  "select k1, stddev_samp(k2) over (partition by k6 order by k1) from  ${tableName} order by k1;"
+
+    qt_select_default  "select k1, variance_pop(k2) over (partition by k6 order by k1 rows between 3 preceding and unbounded following) from  ${tableName} order by k1;"
+    qt_select_default  "select k1, variance_pop(k2) over (partition by k6 order by k1 rows between 3 preceding and 1 preceding) from   ${tableName} order by k1;"
+    qt_select_default  "select k1, variance_pop(k2) over (partition by k6 order by k1 rows between 3 preceding and 1 following) from   ${tableName} order by k1;"
+    qt_select_default  "select k1, variance_pop(k2) over (partition by k6 order by k1 rows between current row and current row) from   ${tableName} order by k1;"
+    qt_select_default  "select k1, variance_pop(k2) over (partition by k6 order by k1 rows between current row and unbounded following) from  ${tableName} order by k1;"
+    qt_select_default  "select k1, variance_pop(k2) over (partition by k6 order by k1) from  ${tableName} order by k1;"
+
+    qt_select_default  "select k1, variance_samp(k2) over (partition by k6 order by k1 rows between 3 preceding and unbounded following) from  ${tableName} order by k1;"
+    qt_select_default  "select k1, variance_samp(k2) over (partition by k6 order by k1 rows between 3 preceding and 1 preceding) from   ${tableName} order by k1;"
+    qt_select_default  "select k1, variance_samp(k2) over (partition by k6 order by k1 rows between 3 preceding and 1 following) from   ${tableName} order by k1;"
+    qt_select_default  "select k1, variance_samp(k2) over (partition by k6 order by k1 rows between current row and current row) from   ${tableName} order by k1;"
+    qt_select_default  "select k1, variance_samp(k2) over (partition by k6 order by k1 rows between current row and unbounded following) from  ${tableName} order by k1;"
+    qt_select_default  "select k1, variance_samp(k2) over (partition by k6 order by k1) from  ${tableName} order by k1;"
+
+    // vectorized
+    sql """ set enable_vectorized_engine = true """
+
+    qt_select_default  "select k1, stddev_pop(k2) over (partition by k6 order by k1 rows between 3 preceding and unbounded following) from ${tableName} order by k1;"
+    qt_select_default  "select k1, stddev_pop(k2) over (partition by k6 order by k1 rows between 3 preceding and 1 preceding) from  ${tableName} order by k1;"
+    qt_select_default  "select k1, stddev_pop(k2) over (partition by k6 order by k1 rows between 3 preceding and 1 following) from  ${tableName} order by k1;"
+    qt_select_default  "select k1, stddev_pop(k2) over (partition by k6 order by k1 rows between current row and current row) from  ${tableName} order by k1;"
+    qt_select_default  "select k1, stddev_pop(k2) over (partition by k6 order by k1 rows between current row and unbounded following) from ${tableName} order by k1;"
+    qt_select_default  "select k1, stddev_pop(k2) over (partition by k6 order by k1) from ${tableName} order by k1;"
+
+    qt_select_default  "select k1, stddev_samp(k2) over (partition by k6 order by k1 rows between 3 preceding and unbounded following) from ${tableName} order by k1;"
+    qt_select_default  "select k1, stddev_samp(k2) over (partition by k6 order by k1 rows between 3 preceding and 1 preceding) from  ${tableName} order by k1;"
+    qt_select_default  "select k1, stddev_samp(k2) over (partition by k6 order by k1 rows between 3 preceding and 1 following) from  ${tableName} order by k1;"
+    qt_select_default  "select k1, stddev_samp(k2) over (partition by k6 order by k1 rows between current row and current row) from  ${tableName} order by k1;"
+    qt_select_default  "select k1, stddev_samp(k2) over (partition by k6 order by k1 rows between current row and unbounded following) from ${tableName} order by k1;"
+    qt_select_default  "select k1, stddev_samp(k2) over (partition by k6 order by k1) from ${tableName} order by k1;"
+
+    qt_select_default  "select k1, variance_pop(k2) over (partition by k6 order by k1 rows between 3 preceding and unbounded following) from ${tableName} order by k1;"
+    qt_select_default  "select k1, variance_pop(k2) over (partition by k6 order by k1 rows between 3 preceding and 1 preceding) from  ${tableName} order by k1;"
+    qt_select_default  "select k1, variance_pop(k2) over (partition by k6 order by k1 rows between 3 preceding and 1 following) from  ${tableName} order by k1;"
+    qt_select_default  "select k1, variance_pop(k2) over (partition by k6 order by k1 rows between current row and current row) from  ${tableName} order by k1;"
+    qt_select_default  "select k1, variance_pop(k2) over (partition by k6 order by k1 rows between current row and unbounded following) from ${tableName} order by k1;"
+    qt_select_default  "select k1, variance_pop(k2) over (partition by k6 order by k1) from ${tableName} order by k1;"
+
+    qt_select_default  "select k1, variance_samp(k2) over (partition by k6 order by k1 rows between 3 preceding and unbounded following) from ${tableName} order by k1;"
+    qt_select_default  "select k1, variance_samp(k2) over (partition by k6 order by k1 rows between 3 preceding and 1 preceding) from  ${tableName} order by k1;"
+    qt_select_default  "select k1, variance_samp(k2) over (partition by k6 order by k1 rows between 3 preceding and 1 following) from  ${tableName} order by k1;"
+    qt_select_default  "select k1, variance_samp(k2) over (partition by k6 order by k1 rows between current row and current row) from  ${tableName} order by k1;"
+    qt_select_default  "select k1, variance_samp(k2) over (partition by k6 order by k1 rows between current row and unbounded following) from ${tableName} order by k1;"
+    qt_select_default  "select k1, variance_samp(k2) over (partition by k6 order by k1) from ${tableName} order by k1;"
+
+    qt_select_default  "select k1, percentile(k2,0.8) over (partition by k6 order by k1 rows between 3 preceding and unbounded following) from ${tableName} order by k1;"
+    qt_select_default  "select k1, percentile(k2,0.8) over (partition by k6 order by k1 rows between 3 preceding and 1 preceding) from  ${tableName} order by k1;"
+    qt_select_default  "select k1, percentile(k2,0.8) over (partition by k6 order by k1 rows between 3 preceding and 1 following) from  ${tableName} order by k1;"
+    qt_select_default  "select k1, percentile(k2,0.8) over (partition by k6 order by k1 rows between current row and current row) from  ${tableName} order by k1;"
+    qt_select_default  "select k1, percentile(k2,0.8) over (partition by k6 order by k1 rows between current row and unbounded following) from ${tableName} order by k1;"
+    qt_select_default  "select k1, percentile(k2,0.8) over (partition by k6 order by k1) from ${tableName} order by k1;"
+
+    qt_select_default  "select k1, percentile_approx(k2,0.8,4096) over (partition by k6 order by k1 rows between 3 preceding and unbounded following) from ${tableName} order by k1;"
+    qt_select_default  "select k1, percentile_approx(k2,0.8,4096) over (partition by k6 order by k1 rows between 3 preceding and 1 preceding) from  ${tableName} order by k1;"
+    qt_select_default  "select k1, percentile_approx(k2,0.8,4096) over (partition by k6 order by k1 rows between 3 preceding and 1 following) from  ${tableName} order by k1;"
+    qt_select_default  "select k1, percentile_approx(k2,0.8,4096) over (partition by k6 order by k1 rows between current row and current row) from  ${tableName} order by k1;"
+    qt_select_default  "select k1, percentile_approx(k2,0.8,4096) over (partition by k6 order by k1 rows between current row and unbounded following) from ${tableName} order by k1;"
+    qt_select_default  "select k1, percentile_approx(k2,0.8,4096) over (partition by k6 order by k1) from ${tableName} order by k1;"
+}
+
+
+
+
+


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org