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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to