You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by dl...@apache.org on 2018/10/12 21:10:29 UTC

[10/10] asterixdb git commit: [ASTERIXDB-2459][FUN] Add sttdev() aggregate function

[ASTERIXDB-2459][FUN] Add sttdev() aggregate function

- user model changes: yes
- storage format changes: no
- interface changes: no

Details:
1. Added stddev aggregation function and test cases
2. Added stddev to documentation and fixed some typos
3. Added serializable aggregate optimizer test
4. Change IncompatibleTypeException in aggregates to be deterministic

commit 26edb576f55a3d2308996f054a58ad43ab910f9b
Author: James Fang <jf...@ucr.edu>
Date:   Fri Oct 5 15:10:37 2018 -0700

Change-Id: Ia709669a9d20358f11ad28f453ae8ad8551f6334
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2990
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Contrib: Jenkins <je...@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Dmitry Lychagin <dm...@couchbase.com>


Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/ab4bed0c
Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/ab4bed0c
Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/ab4bed0c

Branch: refs/heads/master
Commit: ab4bed0cee6a8b4d727ebb67c89da1c983c70487
Parents: eac3888
Author: James Fang <jf...@ucr.edu>
Authored: Fri Oct 12 00:46:31 2018 -0700
Committer: Dmitry Lychagin <dm...@couchbase.com>
Committed: Fri Oct 12 14:09:59 2018 -0700

----------------------------------------------------------------------
 .../asterix-app/data/nontagged/numericData.adm  |   4 +-
 .../asterix-app/data/nontagged/numericData.json |   4 +-
 .../asterix-app/data/nontagged/numericData.txt  |   8 +
 .../queries/aggregate/serial-agg.sqlpp          |  38 +++
 .../results/aggregate/serial-agg.plan           |  24 ++
 .../aggregate-sql/agg_null/agg_null.3.query.aql |   2 +-
 .../agg_null_rec/agg_null_rec.3.query.aql       |   2 +-
 .../agg_null_rec_1/agg_null_rec_1.3.query.aql   |   4 +-
 .../agg_number/agg_number.3.query.aql           |   3 +-
 .../agg_number_rec/agg_number_rec.3.query.aql   |   2 +-
 .../aggregate/agg_null/agg_null.3.query.aql     |   2 +-
 .../agg_null_rec/agg_null_rec.3.query.aql       |   2 +-
 .../agg_null_rec_1/agg_null_rec_1.3.query.aql   |   4 +-
 .../aggregate/agg_number/agg_number.3.query.aql |   3 +-
 .../agg_number_rec/agg_number_rec.3.query.aql   |   2 +-
 .../agg_null/agg_null.3.query.sqlpp             |   2 +-
 .../agg_null_rec/agg_null_rec.3.query.sqlpp     |   3 +
 .../agg_null_rec_1/agg_null_rec_1.3.query.sqlpp |   6 +
 .../agg_number/agg_number.3.query.sqlpp         |   2 +-
 .../agg_number_rec/agg_number_rec.3.query.sqlpp |   3 +
 .../scalar_stddev/scalar_stddev.1.ddl.sqlpp     |  26 ++
 .../scalar_stddev/scalar_stddev.3.query.sqlpp   |  35 ++
 .../scalar_stddev_empty.1.ddl.sqlpp             |  26 ++
 .../scalar_stddev_empty.3.query.sqlpp           |  24 ++
 .../scalar_stddev_null.1.ddl.sqlpp              |  26 ++
 .../scalar_stddev_null.3.query.sqlpp            |  35 ++
 .../serial_stddev_double.1.ddl.sqlpp            |  33 ++
 .../serial_stddev_double.2.update.sqlpp         |  31 ++
 .../serial_stddev_double.3.query.sqlpp          |  25 ++
 .../serial_stddev_double_null.1.ddl.sqlpp       |  33 ++
 .../serial_stddev_double_null.2.update.sqlpp    |  31 ++
 .../serial_stddev_double_null.3.query.sqlpp     |  25 ++
 .../serial_stddev_empty.1.ddl.sqlpp             |  33 ++
 .../serial_stddev_empty.3.query.sqlpp           |  25 ++
 .../serial_stddev_float.1.ddl.sqlpp             |  33 ++
 .../serial_stddev_float.2.update.sqlpp          |  31 ++
 .../serial_stddev_float.3.query.sqlpp           |  25 ++
 .../serial_stddev_float_null.1.ddl.sqlpp        |  33 ++
 .../serial_stddev_float_null.2.update.sqlpp     |  31 ++
 .../serial_stddev_float_null.3.query.sqlpp      |  25 ++
 .../serial_stddev_int16.1.ddl.sqlpp             |  33 ++
 .../serial_stddev_int16.2.update.sqlpp          |  31 ++
 .../serial_stddev_int16.3.query.sqlpp           |  25 ++
 .../serial_stddev_int16_null.1.ddl.sqlpp        |  33 ++
 .../serial_stddev_int16_null.2.update.sqlpp     |  31 ++
 .../serial_stddev_int16_null.3.query.sqlpp      |  25 ++
 .../serial_stddev_int32.1.ddl.sqlpp             |  33 ++
 .../serial_stddev_int32.2.update.sqlpp          |  31 ++
 .../serial_stddev_int32.3.query.sqlpp           |  25 ++
 .../serial_stddev_int32_null.1.ddl.sqlpp        |  33 ++
 .../serial_stddev_int32_null.2.update.sqlpp     |  31 ++
 .../serial_stddev_int32_null.3.query.sqlpp      |  25 ++
 .../serial_stddev_int64.1.ddl.sqlpp             |  33 ++
 .../serial_stddev_int64.2.update.sqlpp          |  31 ++
 .../serial_stddev_int64.3.query.sqlpp           |  25 ++
 .../serial_stddev_int64_null.1.ddl.sqlpp        |  33 ++
 .../serial_stddev_int64_null.2.update.sqlpp     |  31 ++
 .../serial_stddev_int64_null.3.query.sqlpp      |  25 ++
 .../serial_stddev_int8.1.ddl.sqlpp              |  33 ++
 .../serial_stddev_int8.2.update.sqlpp           |  31 ++
 .../serial_stddev_int8.3.query.sqlpp            |  25 ++
 .../serial_stddev_int8_null.1.ddl.sqlpp         |  33 ++
 .../serial_stddev_int8_null.2.update.sqlpp      |  31 ++
 .../serial_stddev_int8_null.3.query.sqlpp       |  25 ++
 .../serial_stddev_mixed.1.ddl.sqlpp             |  33 ++
 .../serial_stddev_mixed.2.update.sqlpp          |  29 ++
 .../serial_stddev_mixed.3.query.sqlpp           |  30 ++
 .../stddev_double/stddev_double.1.ddl.sqlpp     |  25 ++
 .../stddev_double/stddev_double.3.query.sqlpp   |  23 ++
 .../stddev_double_null.1.ddl.sqlpp              |  38 +++
 .../stddev_double_null.3.query.sqlpp            |  26 ++
 .../stddev_empty_01/stddev_empty_01.1.ddl.sqlpp |  27 ++
 .../stddev_empty_01.3.query.sqlpp               |  32 ++
 .../stddev_empty_02/stddev_empty_02.1.ddl.sqlpp |  38 +++
 .../stddev_empty_02.3.query.sqlpp               |  31 ++
 .../stddev_float/stddev_float.1.ddl.sqlpp       |  22 ++
 .../stddev_float/stddev_float.3.query.sqlpp     |  26 ++
 .../stddev_float_nu.1.ddl.sqlpp                 |  38 +++
 .../stddev_float_nu.3.query.sqlpp               |  26 ++
 .../stddev_int16/stddev_int16.1.ddl.sqlpp       |  22 ++
 .../stddev_int16/stddev_int16.3.query.sqlpp     |  26 ++
 .../stddev_int16_null.1.ddl.sqlpp               |  38 +++
 .../stddev_int16_null.3.query.sqlpp             |  26 ++
 .../stddev_int32/stddev_int32.1.ddl.sqlpp       |  22 ++
 .../stddev_int32/stddev_int32.3.query.sqlpp     |  26 ++
 .../stddev_int32_null.1.ddl.sqlpp               |  38 +++
 .../stddev_int32_null.3.query.sqlpp             |  26 ++
 .../stddev_int64/stddev_int64.1.ddl.sqlpp       |  22 ++
 .../stddev_int64/stddev_int64.3.query.sqlpp     |  26 ++
 .../stddev_int64_null.1.ddl.sqlpp               |  38 +++
 .../stddev_int64_null.3.query.sqlpp             |  26 ++
 .../stddev_int8/stddev_int8.1.ddl.sqlpp         |  22 ++
 .../stddev_int8/stddev_int8.3.query.sqlpp       |  26 ++
 .../stddev_int8_null.1.ddl.sqlpp                |  38 +++
 .../stddev_int8_null.3.query.sqlpp              |  26 ++
 .../stddev_mixed/stddev_mixed.3.query.sqlpp     |  28 ++
 .../aggregate/agg_null/agg_null.3.query.sqlpp   |   2 +-
 .../agg_null_rec/agg_null_rec.3.query.sqlpp     |   3 +
 .../agg_null_rec_1/agg_null_rec_1.3.query.sqlpp |   6 +
 .../agg_number/agg_number.3.query.sqlpp         |   2 +-
 .../agg_number_rec/agg_number_rec.3.query.sqlpp |   3 +
 .../scalar_stddev/scalar_stddev.1.ddl.sqlpp     |  26 ++
 .../scalar_stddev/scalar_stddev.3.query.sqlpp   |  35 ++
 .../scalar_stddev_empty.1.ddl.sqlpp             |  26 ++
 .../scalar_stddev_empty.3.query.sqlpp           |  24 ++
 .../scalar_stddev_null.1.ddl.sqlpp              |  26 ++
 .../scalar_stddev_null.3.query.sqlpp            |  35 ++
 .../serial_stddev_double.1.ddl.sqlpp            |  33 ++
 .../serial_stddev_double.2.update.sqlpp         |  31 ++
 .../serial_stddev_double.3.query.sqlpp          |  25 ++
 .../serial_stddev_double_null.1.ddl.sqlpp       |  33 ++
 .../serial_stddev_double_null.2.update.sqlpp    |  31 ++
 .../serial_stddev_double_null.3.query.sqlpp     |  25 ++
 .../serial_stddev_empty.1.ddl.sqlpp             |  33 ++
 .../serial_stddev_empty.3.query.sqlpp           |  25 ++
 .../serial_stddev_float.1.ddl.sqlpp             |  33 ++
 .../serial_stddev_float.2.update.sqlpp          |  31 ++
 .../serial_stddev_float.3.query.sqlpp           |  25 ++
 .../serial_stddev_float_null.1.ddl.sqlpp        |  33 ++
 .../serial_stddev_float_null.2.update.sqlpp     |  31 ++
 .../serial_stddev_float_null.3.query.sqlpp      |  25 ++
 .../serial_stddev_int16.1.ddl.sqlpp             |  33 ++
 .../serial_stddev_int16.2.update.sqlpp          |  31 ++
 .../serial_stddev_int16.3.query.sqlpp           |  25 ++
 .../serial_stddev_int16_null.1.ddl.sqlpp        |  33 ++
 .../serial_stddev_int16_null.2.update.sqlpp     |  31 ++
 .../serial_stddev_int16_null.3.query.sqlpp      |  25 ++
 .../serial_stddev_int32.1.ddl.sqlpp             |  33 ++
 .../serial_stddev_int32.2.update.sqlpp          |  31 ++
 .../serial_stddev_int32.3.query.sqlpp           |  25 ++
 .../serial_stddev_int32_null.1.ddl.sqlpp        |  33 ++
 .../serial_stddev_int32_null.2.update.sqlpp     |  31 ++
 .../serial_stddev_int32_null.3.query.sqlpp      |  25 ++
 .../serial_stddev_int64.1.ddl.sqlpp             |  33 ++
 .../serial_stddev_int64.2.update.sqlpp          |  31 ++
 .../serial_stddev_int64.3.query.sqlpp           |  25 ++
 .../serial_stddev_int64_null.1.ddl.sqlpp        |  33 ++
 .../serial_stddev_int64_null.2.update.sqlpp     |  31 ++
 .../serial_stddev_int64_null.3.query.sqlpp      |  25 ++
 .../serial_stddev_int8.1.ddl.sqlpp              |  33 ++
 .../serial_stddev_int8.2.update.sqlpp           |  31 ++
 .../serial_stddev_int8.3.query.sqlpp            |  25 ++
 .../serial_stddev_int8_null.1.ddl.sqlpp         |  33 ++
 .../serial_stddev_int8_null.2.update.sqlpp      |  31 ++
 .../serial_stddev_int8_null.3.query.sqlpp       |  25 ++
 .../serial_stddev_mixed.1.ddl.sqlpp             |  33 ++
 .../serial_stddev_mixed.2.update.sqlpp          |  29 ++
 .../serial_stddev_mixed.3.query.sqlpp           |  30 ++
 .../stddev_double/stddev_double.1.ddl.sqlpp     |  25 ++
 .../stddev_double/stddev_double.3.query.sqlpp   |  23 ++
 .../stddev_double_null.1.ddl.sqlpp              |  38 +++
 .../stddev_double_null.3.query.sqlpp            |  26 ++
 .../stddev_empty_01/stddev_empty_01.1.ddl.sqlpp |  27 ++
 .../stddev_empty_01.3.query.sqlpp               |  32 ++
 .../stddev_empty_02/stddev_empty_02.1.ddl.sqlpp |  38 +++
 .../stddev_empty_02.3.query.sqlpp               |  31 ++
 .../stddev_float/stddev_float.1.ddl.sqlpp       |  22 ++
 .../stddev_float/stddev_float.3.query.sqlpp     |  26 ++
 .../stddev_float_null.1.ddl.sqlpp               |  38 +++
 .../stddev_float_null.3.query.sqlpp             |  26 ++
 .../stddev_int16/stddev_int16.1.ddl.sqlpp       |  22 ++
 .../stddev_int16/stddev_int16.3.query.sqlpp     |  26 ++
 .../stddev_int16_null.1.ddl.sqlpp               |  38 +++
 .../stddev_int16_null.3.query.sqlpp             |  26 ++
 .../stddev_int32/stddev_int32.1.ddl.sqlpp       |  22 ++
 .../stddev_int32/stddev_int32.3.query.sqlpp     |  26 ++
 .../stddev_int32_null.1.ddl.sqlpp               |  38 +++
 .../stddev_int32_null.3.query.sqlpp             |  26 ++
 .../stddev_int64/stddev_int64.1.ddl.sqlpp       |  22 ++
 .../stddev_int64/stddev_int64.3.query.sqlpp     |  26 ++
 .../stddev_int64_null.1.ddl.sqlpp               |  38 +++
 .../stddev_int64_null.3.query.sqlpp             |  26 ++
 .../stddev_int8/stddev_int8.1.ddl.sqlpp         |  22 ++
 .../stddev_int8/stddev_int8.3.query.sqlpp       |  26 ++
 .../stddev_int8_null.1.ddl.sqlpp                |  38 +++
 .../stddev_int8_null.3.query.sqlpp              |  26 ++
 .../stddev_mixed/stddev_mixed.3.query.sqlpp     |  28 ++
 .../aggregate-sql/agg_null/agg_null.1.adm       |   2 +-
 .../agg_null_rec/agg_null_rec.1.adm             |   2 +-
 .../agg_null_rec_1/agg_null_rec.1.adm           |   2 +-
 .../aggregate-sql/agg_number/agg_number.1.adm   |   2 +-
 .../agg_number_rec/agg_number_rec.1.adm         |   2 +-
 .../avg_int8_null/avg_int8_null.1.adm           |   2 +-
 .../aggregate-sql/count_null/count_null.1.adm   |   2 +-
 .../scalar_stddev/scalar_stddev.1.adm           |   6 +
 .../scalar_stddev_empty.1.adm                   |   1 +
 .../scalar_stddev_null/scalar_stddev_null.1.adm |   6 +
 .../serial_stddev_double.1.adm                  |   1 +
 .../serial_stddev_double_null.1.adm             |   1 +
 .../serial_stddev_empty.1.adm                   |   0
 .../serial_stddev_float.1.adm                   |   1 +
 .../serial_stddev_float_null.1.adm              |   1 +
 .../serial_stddev_int16.1.adm                   |   1 +
 .../serial_stddev_int16_null.1.adm              |   1 +
 .../serial_stddev_int32.1.adm                   |   1 +
 .../serial_stddev_int32_null.1.adm              |   1 +
 .../serial_stddev_int64.1.adm                   |   1 +
 .../serial_stddev_int64_null.1.adm              |   1 +
 .../serial_stddev_int8/serial_stddev_int8.1.adm |   1 +
 .../serial_stddev_int8_null.1.adm               |   1 +
 .../serial_stddev_mixed.1.adm                   |   1 +
 .../stddev_double/stddev_double.1.adm           |   1 +
 .../stddev_double_null/stddev_double_null.1.adm |   1 +
 .../stddev_empty_01/stddev_empty_01.1.adm       |   1 +
 .../stddev_empty_02/stddev_empty_02.1.adm       |   1 +
 .../stddev_float/stddev_float.1.adm             |   1 +
 .../stddev_float_null/stddev_float_null.1.adm   |   1 +
 .../stddev_int16/stddev_int16.1.adm             |   1 +
 .../stddev_int16_null/stddev_int16_null.1.adm   |   1 +
 .../stddev_int32/stddev_int32.1.adm             |   1 +
 .../stddev_int32_null/stddev_int32_null.1.adm   |   1 +
 .../stddev_int64/stddev_int64.1.adm             |   1 +
 .../stddev_int64_null/stddev_int64_null.1.adm   |   1 +
 .../aggregate-sql/stddev_int8/stddev_int8.1.adm |   1 +
 .../stddev_int8_null/stddev_int8_null.1.adm     |   1 +
 .../stddev_mixed/stddev_mixed.1.adm             |   1 +
 .../sum_double_null/sum_double_null.1.adm       |   2 +-
 .../sum_float_null/sum_float_null.1.adm         |   2 +-
 .../sum_int16_null/sum_int16_null.1.adm         |   2 +-
 .../sum_int32_null/sum_int32_null.1.adm         |   2 +-
 .../sum_int64_null/sum_int64_null.1.adm         |   2 +-
 .../sum_int8_null/sum_int8_null.1.adm           |   2 +-
 .../results/aggregate/agg_null/agg_null.1.adm   |   2 +-
 .../aggregate/agg_null_rec/agg_null_rec.1.adm   |   2 +-
 .../aggregate/agg_null_rec_1/agg_null_rec.1.adm |   2 +-
 .../aggregate/agg_number/agg_number.1.adm       |   2 +-
 .../agg_number_rec/agg_number_rec.1.adm         |   2 +-
 .../aggregate/count_null/count_null.1.adm       |   2 +-
 .../aggregate/scalar_stddev/scalar_stddev.1.adm |   6 +
 .../scalar_stddev_empty.1.adm                   |   1 +
 .../scalar_stddev_null/scalar_stddev_null.1.adm |   6 +
 .../serial_stddev_double.1.adm                  |   1 +
 .../serial_stddev_double_null.1.adm             |   1 +
 .../serial_stddev_empty.1.adm                   |   0
 .../serial_stddev_float.1.adm                   |   1 +
 .../serial_stddev_float_null.1.adm              |   1 +
 .../serial_stddev_int16.1.adm                   |   1 +
 .../serial_stddev_int16_null.1.adm              |   1 +
 .../serial_stddev_int32.1.adm                   |   1 +
 .../serial_stddev_int32_null.1.adm              |   1 +
 .../serial_stddev_int64.1.adm                   |   1 +
 .../serial_stddev_int64_null.1.adm              |   1 +
 .../serial_stddev_int8/serial_stddev_int8.1.adm |   1 +
 .../serial_stddev_int8_null.1.adm               |   1 +
 .../serial_stddev_mixed.1.adm                   |   1 +
 .../aggregate/stddev_double/stddev_double.1.adm |   1 +
 .../stddev_double_null/stddev_double_null.1.adm |   1 +
 .../stddev_empty_01/stddev_empty_01.1.adm       |   1 +
 .../stddev_empty_02/stddev_empty_02.1.adm       |   1 +
 .../aggregate/stddev_float/stddev_float.1.adm   |   1 +
 .../stddev_float_null/stddev_float_null.1.adm   |   1 +
 .../aggregate/stddev_int16/stddev_int16.1.adm   |   1 +
 .../stddev_int16_null/stddev_int16_null.1.adm   |   1 +
 .../aggregate/stddev_int32/stddev_int32.1.adm   |   1 +
 .../stddev_int32_null/stddev_int32_null.1.adm   |   1 +
 .../aggregate/stddev_int64/stddev_int64.1.adm   |   1 +
 .../stddev_int64_null/stddev_int64_null.1.adm   |   1 +
 .../aggregate/stddev_int8/stddev_int8.1.adm     |   1 +
 .../stddev_int8_null/stddev_int8_null.1.adm     |   1 +
 .../aggregate/stddev_mixed/stddev_mixed.1.adm   |   1 +
 .../numeric_types_01/numeric_types_01.1.adm     |   4 +-
 .../aggregate-sql/agg_null/agg_null.3.ast       |  19 ++
 .../agg_null_rec/agg_null_rec.3.ast             |  19 ++
 .../agg_null_rec_1/agg_null_rec_1.3.ast         |  26 ++
 .../aggregate-sql/agg_number/agg_number.3.ast   |  32 ++
 .../agg_number_rec/agg_number_rec.3.ast         |  19 ++
 .../scalar_stddev/scalar_stddev.1.ast           |   0
 .../scalar_stddev/scalar_stddev.3.ast           | 105 ++++++
 .../scalar_stddev_empty.1.ast                   |   0
 .../scalar_stddev_empty.3.ast                   |   7 +
 .../scalar_stddev_null/scalar_stddev_null.1.ast |   0
 .../scalar_stddev_null/scalar_stddev_null.3.ast | 111 +++++++
 .../serial_stddev_double.1.ast                  |   9 +
 .../serial_stddev_double.2.ast                  |   1 +
 .../serial_stddev_double.3.ast                  |  40 +++
 .../serial_stddev_double_null.1.ast             |   9 +
 .../serial_stddev_double_null.2.ast             |   1 +
 .../serial_stddev_double_null.3.ast             |  40 +++
 .../serial_stddev_empty.1.ast                   |   9 +
 .../serial_stddev_empty.3.ast                   |  40 +++
 .../serial_stddev_float.1.ast                   |   9 +
 .../serial_stddev_float.2.ast                   |   1 +
 .../serial_stddev_float.3.ast                   |  40 +++
 .../serial_stddev_float_null.1.ast              |   9 +
 .../serial_stddev_float_null.2.ast              |   1 +
 .../serial_stddev_float_null.3.ast              |  40 +++
 .../serial_stddev_int16.1.ast                   |   9 +
 .../serial_stddev_int16.2.ast                   |   1 +
 .../serial_stddev_int16.3.ast                   |  40 +++
 .../serial_stddev_int16_null.1.ast              |   9 +
 .../serial_stddev_int16_null.2.ast              |   1 +
 .../serial_stddev_int16_null.3.ast              |  40 +++
 .../serial_stddev_int32.1.ast                   |   9 +
 .../serial_stddev_int32.2.ast                   |   1 +
 .../serial_stddev_int32.3.ast                   |  40 +++
 .../serial_stddev_int32_null.1.ast              |   9 +
 .../serial_stddev_int32_null.2.ast              |   1 +
 .../serial_stddev_int32_null.3.ast              |  40 +++
 .../serial_stddev_int64.1.ast                   |   9 +
 .../serial_stddev_int64.2.ast                   |   1 +
 .../serial_stddev_int64.3.ast                   |  40 +++
 .../serial_stddev_int64_null.1.ast              |   9 +
 .../serial_stddev_int64_null.2.ast              |   1 +
 .../serial_stddev_int64_null.3.ast              |  40 +++
 .../serial_stddev_int8/serial_stddev_int8.1.ast |   9 +
 .../serial_stddev_int8/serial_stddev_int8.2.ast |   1 +
 .../serial_stddev_int8/serial_stddev_int8.3.ast |  40 +++
 .../serial_stddev_int8_null.1.ast               |   9 +
 .../serial_stddev_int8_null.2.ast               |   1 +
 .../serial_stddev_int8_null.3.ast               |  40 +++
 .../serial_stddev_int64_null.1.ast              |   9 +
 .../serial_stddev_int64_null.2.ast              |   1 +
 .../serial_stddev_int64_null.3.ast              |  40 +++
 .../stddev_double/stddev_double.1.ast           |   1 +
 .../stddev_double/stddev_double.3.ast           |  19 ++
 .../stddev_double_null/stddev_double_null.1.ast |  13 +
 .../stddev_double_null/stddev_double_null.3.ast |  23 ++
 .../stddev_empty_01/stddev_empty_01.1.ast       |   0
 .../stddev_empty_01/stddev_empty_01.3.ast       |  24 ++
 .../stddev_empty_02/stddev_empty_02.1.ast       |   8 +
 .../stddev_empty_02/stddev_empty_02.3.ast       |  19 ++
 .../stddev_float/stddev_float.1.ast             |   0
 .../stddev_float/stddev_float.3.ast             |  24 ++
 .../stddev_float_null/stddev_float_nu.1.ast     |  13 +
 .../stddev_float_null/stddev_float_nu.3.ast     |  23 ++
 .../stddev_int16/stddev_int16.1.ast             |   0
 .../stddev_int16/stddev_int16.3.ast             |  24 ++
 .../stddev_int16_null/stddev_int16_null.1.ast   |  13 +
 .../stddev_int16_null/stddev_int16_null.3.ast   |  23 ++
 .../stddev_int32/stddev_int32.1.ast             |   0
 .../stddev_int32/stddev_int32.3.ast             |  24 ++
 .../stddev_int32_null/stddev_int32_null.1.ast   |  13 +
 .../stddev_int32_null/stddev_int32_null.3.ast   |  23 ++
 .../stddev_int64/stddev_int64.1.ast             |   0
 .../stddev_int64/stddev_int64.3.ast             |  24 ++
 .../stddev_int64_null/stddev_int64_null.1.ast   |  13 +
 .../stddev_int64_null/stddev_int64_null.3.ast   |  23 ++
 .../aggregate-sql/stddev_int8/stddev_int8.1.ast |   0
 .../aggregate-sql/stddev_int8/stddev_int8.3.ast |  24 ++
 .../stddev_int8_null/stddev_int8_null.1.ast     |  13 +
 .../stddev_int8_null/stddev_int8_null.3.ast     |  23 ++
 .../stddev_mixed/stddev_mixed.3.ast             |  22 ++
 .../aggregate/agg_null/agg_null.3.ast           |  19 ++
 .../aggregate/agg_null_rec/agg_null_rec.3.ast   |  19 ++
 .../agg_null_rec_1/agg_null_rec_1.3.ast         |  27 ++
 .../aggregate/agg_number/agg_number.3.ast       |  32 ++
 .../agg_number_rec/agg_number_rec.3.ast         |  19 ++
 .../aggregate/scalar_stddev/scalar_stddev.1.ast |   0
 .../aggregate/scalar_stddev/scalar_stddev.3.ast | 105 ++++++
 .../scalar_stddev_empty.1.ast                   |   0
 .../scalar_stddev_empty.3.ast                   |   7 +
 .../scalar_stddev_null/scalar_stddev_null.1.ast |   0
 .../scalar_stddev_null/scalar_stddev_null.3.ast | 111 +++++++
 .../serial_stddev_double.1.ast                  |   9 +
 .../serial_stddev_double.2.ast                  |   1 +
 .../serial_stddev_double.3.ast                  |  40 +++
 .../serial_stddev_double_null.1.ast             |   9 +
 .../serial_stddev_double_null.2.ast             |   1 +
 .../serial_stddev_double_null.3.ast             |  40 +++
 .../serial_stddev_empty.1.ast                   |   9 +
 .../serial_stddev_empty.3.ast                   |  40 +++
 .../serial_stddev_float.1.ast                   |   9 +
 .../serial_stddev_float.2.ast                   |   1 +
 .../serial_stddev_float.3.ast                   |  40 +++
 .../serial_stddev_float_null.1.ast              |   9 +
 .../serial_stddev_float_null.2.ast              |   1 +
 .../serial_stddev_float_null.3.ast              |  40 +++
 .../serial_stddev_int16.1.ast                   |   9 +
 .../serial_stddev_int16.2.ast                   |   1 +
 .../serial_stddev_int16.3.ast                   |  40 +++
 .../serial_stddev_int16_null.1.ast              |   9 +
 .../serial_stddev_int16_null.2.ast              |   1 +
 .../serial_stddev_int16_null.3.ast              |  40 +++
 .../serial_stddev_int32.1.ast                   |   9 +
 .../serial_stddev_int32.2.ast                   |   1 +
 .../serial_stddev_int32.3.ast                   |  40 +++
 .../serial_stddev_int32_null.1.ast              |   9 +
 .../serial_stddev_int32_null.2.ast              |   1 +
 .../serial_stddev_int32_null.3.ast              |  40 +++
 .../serial_stddev_int64.1.ast                   |   9 +
 .../serial_stddev_int64.2.ast                   |   1 +
 .../serial_stddev_int64.3.ast                   |  40 +++
 .../serial_stddev_int64_null.1.ast              |   9 +
 .../serial_stddev_int64_null.2.ast              |   1 +
 .../serial_stddev_int64_null.3.ast              |  40 +++
 .../serial_stddev_int8/serial_stddev_int8.1.ast |   9 +
 .../serial_stddev_int8/serial_stddev_int8.2.ast |   1 +
 .../serial_stddev_int8/serial_stddev_int8.3.ast |  40 +++
 .../serial_stddev_int8_null.1.ast               |   9 +
 .../serial_stddev_int8_null.2.ast               |   1 +
 .../serial_stddev_int8_null.3.ast               |  40 +++
 .../serial_stddev_mixed.1.ast                   |   9 +
 .../serial_stddev_mixed.2.ast                   |   1 +
 .../serial_stddev_mixed.3.ast                   |  40 +++
 .../aggregate/stddev_double/stddev_double.1.ast |   2 +
 .../aggregate/stddev_double/stddev_double.3.ast |  19 ++
 .../stddev_double_null/stddev_double_null.1.ast |  13 +
 .../stddev_double_null/stddev_double_null.3.ast |  23 ++
 .../stddev_empty_01/stddev_empty_01.1.ast       |   0
 .../stddev_empty_01/stddev_empty_01.3.ast       |  24 ++
 .../stddev_empty_02/stddev_empty_02.1.ast       |   8 +
 .../stddev_empty_02/stddev_empty_02.3.ast       |  19 ++
 .../aggregate/stddev_float/stddev_float.1.ast   |   0
 .../aggregate/stddev_float/stddev_float.3.ast   |  24 ++
 .../stddev_float_null/stddev_float_nu.1.ast     |  13 +
 .../stddev_float_null/stddev_float_nu.3.ast     |  23 ++
 .../aggregate/stddev_int16/stddev_int16.1.ast   |   0
 .../aggregate/stddev_int16/stddev_int16.3.ast   |  24 ++
 .../stddev_int16_null/stddev_int16_null.1.ast   |  13 +
 .../stddev_int16_null/stddev_int16_null.3.ast   |  23 ++
 .../aggregate/stddev_int32/stddev_int32.1.ast   |   0
 .../aggregate/stddev_int32/stddev_int32.3.ast   |  18 +
 .../stddev_int32_null/stddev_int32_null.1.ast   |  13 +
 .../stddev_int32_null/stddev_int32_null.3.ast   |  23 ++
 .../aggregate/stddev_int64/stddev_int64.1.ast   |   0
 .../aggregate/stddev_int64/stddev_int64.3.ast   |  24 ++
 .../stddev_int64_null/stddev_int64_null.1.ast   |  13 +
 .../stddev_int64_null/stddev_int64_null.3.ast   |  23 ++
 .../aggregate/stddev_int8/stddev_int8.1.ast     |   0
 .../aggregate/stddev_int8/stddev_int8.3.ast     |  24 ++
 .../stddev_int8_null/stddev_int8_null.1.ast     |  13 +
 .../stddev_int8_null/stddev_int8_null.3.ast     |  23 ++
 .../aggregate/stddev_mixed/stddev_mixed.3.ast   |  22 ++
 .../resources/runtimets/testsuite_sqlpp.xml     | 324 ++++++++++++++++++
 .../runtimets/testsuite_sqlpp_parser.xml        | 329 +++++++++++++++++++
 .../main/markdown/builtins/9_aggregate_sql.md   |  60 +++-
 .../asterix/om/functions/BuiltinFunctions.java  | 121 +++++++
 .../LocalSingleVarStatisticsTypeComputer.java   |  44 +++
 .../om/typecomputer/TypeComputerTest.java       |   1 +
 .../ScalarSqlStddevAggregateDescriptor.java     |  49 +++
 .../scalar/ScalarStddevAggregateDescriptor.java |  48 +++
 ...bstractSerializableAvgAggregateFunction.java |   8 +-
 ...ngleVariableStatisticsAggregateFunction.java | 296 +++++++++++++++++
 ...bstractSerializableSumAggregateFunction.java |   8 +-
 ...zableGlobalSqlStddevAggregateDescriptor.java |  63 ++++
 ...lizableGlobalSqlStddevAggregateFunction.java |  64 ++++
 ...alizableGlobalStddevAggregateDescriptor.java |  63 ++++
 ...rializableGlobalStddevAggregateFunction.java |  73 ++++
 ...ntermediateSqlStddevAggregateDescriptor.java |  63 ++++
 ...eIntermediateSqlStddevAggregateFunction.java |  63 ++++
 ...leIntermediateStddevAggregateDescriptor.java |  63 ++++
 ...ableIntermediateStddevAggregateFunction.java |  73 ++++
 ...izableLocalSqlStddevAggregateDescriptor.java |  63 ++++
 ...alizableLocalSqlStddevAggregateFunction.java |  63 ++++
 ...ializableLocalStddevAggregateDescriptor.java |  62 ++++
 ...erializableLocalStddevAggregateFunction.java |  72 ++++
 ...erializableSqlStddevAggregateDescriptor.java |  60 ++++
 .../SerializableSqlStddevAggregateFunction.java |  63 ++++
 .../SerializableStddevAggregateDescriptor.java  |  62 ++++
 .../SerializableStddevAggregateFunction.java    |  71 ++++
 .../std/AbstractAvgAggregateFunction.java       |   6 +-
 .../std/AbstractMinMaxAggregateFunction.java    |   6 +-
 ...actSingleVarStatisticsAggregateFunction.java | 260 +++++++++++++++
 .../std/AbstractSumAggregateFunction.java       |   9 +-
 .../std/GlobalSqlStddevAggregateDescriptor.java |  62 ++++
 .../std/GlobalSqlStddevAggregateFunction.java   |  62 ++++
 .../std/GlobalStddevAggregateDescriptor.java    |  62 ++++
 .../std/GlobalStddevAggregateFunction.java      |  69 ++++
 ...ntermediateSqlStddevAggregateDescriptor.java |  61 ++++
 .../IntermediateSqlStddevAggregateFunction.java |  61 ++++
 .../IntermediateStddevAggregateDescriptor.java  |  62 ++++
 .../IntermediateStddevAggregateFunction.java    |  70 ++++
 .../std/LocalSqlStddevAggregateDescriptor.java  |  60 ++++
 .../std/LocalSqlStddevAggregateFunction.java    |  61 ++++
 .../std/LocalStddevAggregateDescriptor.java     |  60 ++++
 .../std/LocalStddevAggregateFunction.java       |  69 ++++
 .../std/SqlStddevAggregateDescriptor.java       |  61 ++++
 .../std/SqlStddevAggregateFunction.java         |  61 ++++
 .../std/StddevAggregateDescriptor.java          |  61 ++++
 .../aggregates/std/StddevAggregateFunction.java |  69 ++++
 .../utils/SingleVarFunctionsUtil.java           |  93 ++++++
 .../runtime/functions/FunctionCollection.java   |  36 ++
 472 files changed, 11326 insertions(+), 48 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ab4bed0c/asterixdb/asterix-app/data/nontagged/numericData.adm
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/data/nontagged/numericData.adm b/asterixdb/asterix-app/data/nontagged/numericData.adm
index 06dd89a..12a7a7a 100644
--- a/asterixdb/asterix-app/data/nontagged/numericData.adm
+++ b/asterixdb/asterix-app/data/nontagged/numericData.adm
@@ -1,2 +1,4 @@
-{ "id": 10, "int8Field": int8("48"), "int16Field": int16("-16"),"int32Field": int32("-32"), "int64Field": int64("-64"), "int8Field2": int8("+48i8"), "int16Field2": int16("+16i16"),"int32Field2": int32("+32i32"),"int64Field2": int64("+64i64"),"int8Field3": +48i8, "int16Field3": +16i16,"int32Field3": +32i32,"int64Field3": +64i64, "int8Field4": -48i8, "int16Field4": -16i16,"int32Field4": -32i32,"int64Field4": -64i64, "floatField": float("+64"),"doubleField": double("+64"),"floatco2": float("+.64"),"doubleco2": double("+.64"),"floatco3": float("+64.1"),"doubleco3": double("+64.1"),"floatco4": float("+5.0e+10"),"doubleco4": double("+5.00e+10"),"floatco5": float("+5.0E10"),"doubleco5": double("+5.00E10"),"floatco6": float("+5.0E-10"),"doubleco6": double("+5.00E-10")}
+{ "id": 8, "int8Field": int8("48"), "int16Field": int16("-16"),"int32Field": int32("-32"), "int64Field": int64("-64"), "int8Field2": int8("+48i8"), "int16Field2": int16("+16i16"),"int32Field2": int32("+32i32"),"int64Field2": int64("+64i64"),"int8Field3": +48i8, "int16Field3": +16i16,"int32Field3": +32i32,"int64Field3": +64i64, "int8Field4": -48i8, "int16Field4": -16i16,"int32Field4": -32i32,"int64Field4": -64i64, "floatField": float("+64"),"doubleField": double("+64"),"floatco2": float("+.64"),"doubleco2": double("+.64"),"floatco3": float("+64.1"),"doubleco3": double("+64.1"),"floatco4": float("+5.0e+10"),"doubleco4": double("+5.00e+10"),"floatco5": float("+5.0E10"),"doubleco5": double("+5.00E10"),"floatco6": float("+5.0E-10"),"doubleco6": double("+5.00E-10")}
+{ "id": 9, "int8Field": int8("2"), "int16Field": int16("-16"),"int32Field": int32("-32"), "int64Field": int64("-64"), "int8Field2": int8("+48i8"), "int16Field2": int16("+16i16"),"int32Field2": int32("+32i32"),"int64Field2": int64("+64i64"),"int8Field3": +48i8, "int16Field3": +16i16,"int32Field3": +32i32,"int64Field3": +64i64, "int8Field4": -48i8, "int16Field4": -16i16,"int32Field4": -32i32,"int64Field4": -64i64, "floatField": float("+64"),"doubleField": double("+64"),"floatco2": float("+.64"),"doubleco2": double("+.64"),"floatco3": float("+64.1"),"doubleco3": double("+64.1"),"floatco4": float("+5.0e+10"),"doubleco4": double("+5.00e+10"),"floatco5": float("+5.0E10"),"doubleco5": double("+5.00E10"),"floatco6": float("+5.0E-10"),"doubleco6": double("+5.00E-10")}
+{ "id": 10, "int8Field": int8("4"), "int16Field": int16("-16"),"int32Field": int32("-32"), "int64Field": int64("-64"), "int8Field2": int8("+48i8"), "int16Field2": int16("+16i16"),"int32Field2": int32("+32i32"),"int64Field2": int64("+64i64"),"int8Field3": +48i8, "int16Field3": +16i16,"int32Field3": +32i32,"int64Field3": +64i64, "int8Field4": -48i8, "int16Field4": -16i16,"int32Field4": -32i32,"int64Field4": -64i64, "floatField": float("+64"),"doubleField": double("+64"),"floatco2": float("+.64"),"doubleco2": double("+.64"),"floatco3": float("+64.1"),"doubleco3": double("+64.1"),"floatco4": float("+5.0e+10"),"doubleco4": double("+5.00e+10"),"floatco5": float("+5.0E10"),"doubleco5": double("+5.00E10"),"floatco6": float("+5.0E-10"),"doubleco6": double("+5.00E-10")}
 { "id": 11}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ab4bed0c/asterixdb/asterix-app/data/nontagged/numericData.json
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/data/nontagged/numericData.json b/asterixdb/asterix-app/data/nontagged/numericData.json
index 06dd89a..12a7a7a 100644
--- a/asterixdb/asterix-app/data/nontagged/numericData.json
+++ b/asterixdb/asterix-app/data/nontagged/numericData.json
@@ -1,2 +1,4 @@
-{ "id": 10, "int8Field": int8("48"), "int16Field": int16("-16"),"int32Field": int32("-32"), "int64Field": int64("-64"), "int8Field2": int8("+48i8"), "int16Field2": int16("+16i16"),"int32Field2": int32("+32i32"),"int64Field2": int64("+64i64"),"int8Field3": +48i8, "int16Field3": +16i16,"int32Field3": +32i32,"int64Field3": +64i64, "int8Field4": -48i8, "int16Field4": -16i16,"int32Field4": -32i32,"int64Field4": -64i64, "floatField": float("+64"),"doubleField": double("+64"),"floatco2": float("+.64"),"doubleco2": double("+.64"),"floatco3": float("+64.1"),"doubleco3": double("+64.1"),"floatco4": float("+5.0e+10"),"doubleco4": double("+5.00e+10"),"floatco5": float("+5.0E10"),"doubleco5": double("+5.00E10"),"floatco6": float("+5.0E-10"),"doubleco6": double("+5.00E-10")}
+{ "id": 8, "int8Field": int8("48"), "int16Field": int16("-16"),"int32Field": int32("-32"), "int64Field": int64("-64"), "int8Field2": int8("+48i8"), "int16Field2": int16("+16i16"),"int32Field2": int32("+32i32"),"int64Field2": int64("+64i64"),"int8Field3": +48i8, "int16Field3": +16i16,"int32Field3": +32i32,"int64Field3": +64i64, "int8Field4": -48i8, "int16Field4": -16i16,"int32Field4": -32i32,"int64Field4": -64i64, "floatField": float("+64"),"doubleField": double("+64"),"floatco2": float("+.64"),"doubleco2": double("+.64"),"floatco3": float("+64.1"),"doubleco3": double("+64.1"),"floatco4": float("+5.0e+10"),"doubleco4": double("+5.00e+10"),"floatco5": float("+5.0E10"),"doubleco5": double("+5.00E10"),"floatco6": float("+5.0E-10"),"doubleco6": double("+5.00E-10")}
+{ "id": 9, "int8Field": int8("2"), "int16Field": int16("-16"),"int32Field": int32("-32"), "int64Field": int64("-64"), "int8Field2": int8("+48i8"), "int16Field2": int16("+16i16"),"int32Field2": int32("+32i32"),"int64Field2": int64("+64i64"),"int8Field3": +48i8, "int16Field3": +16i16,"int32Field3": +32i32,"int64Field3": +64i64, "int8Field4": -48i8, "int16Field4": -16i16,"int32Field4": -32i32,"int64Field4": -64i64, "floatField": float("+64"),"doubleField": double("+64"),"floatco2": float("+.64"),"doubleco2": double("+.64"),"floatco3": float("+64.1"),"doubleco3": double("+64.1"),"floatco4": float("+5.0e+10"),"doubleco4": double("+5.00e+10"),"floatco5": float("+5.0E10"),"doubleco5": double("+5.00E10"),"floatco6": float("+5.0E-10"),"doubleco6": double("+5.00E-10")}
+{ "id": 10, "int8Field": int8("4"), "int16Field": int16("-16"),"int32Field": int32("-32"), "int64Field": int64("-64"), "int8Field2": int8("+48i8"), "int16Field2": int16("+16i16"),"int32Field2": int32("+32i32"),"int64Field2": int64("+64i64"),"int8Field3": +48i8, "int16Field3": +16i16,"int32Field3": +32i32,"int64Field3": +64i64, "int8Field4": -48i8, "int16Field4": -16i16,"int32Field4": -32i32,"int64Field4": -64i64, "floatField": float("+64"),"doubleField": double("+64"),"floatco2": float("+.64"),"doubleco2": double("+.64"),"floatco3": float("+64.1"),"doubleco3": double("+64.1"),"floatco4": float("+5.0e+10"),"doubleco4": double("+5.00e+10"),"floatco5": float("+5.0E10"),"doubleco5": double("+5.00E10"),"floatco6": float("+5.0E-10"),"doubleco6": double("+5.00E-10")}
 { "id": 11}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ab4bed0c/asterixdb/asterix-app/data/nontagged/numericData.txt
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/data/nontagged/numericData.txt b/asterixdb/asterix-app/data/nontagged/numericData.txt
index fe9d53e..dbc99da 100644
--- a/asterixdb/asterix-app/data/nontagged/numericData.txt
+++ b/asterixdb/asterix-app/data/nontagged/numericData.txt
@@ -2,4 +2,12 @@
 20:int8("+48i8"):int16("+16i16"):int32("+32i32"):int64("+64i64"):float("+5.0e+10"):double("+5.00e+10")
 30:+48i8:+16i16:+32i32:+64i64:float("+5.0E10"):double("+5.00E10")
 40:-48i8:-16i16:-32i32:-64i64:float("+5.0E-10"):double("+5.00E-10")
+50:int8("48"):int16("-16"):int32("-32"):int64("-64"):float("+64"):double("+64")
+60:int8("+48i8"):int16("+16i16"):int32("+32i32"):int64("+64i64"):float("+5.0e+10"):double("+5.00e+10")
+70:+48i8:+16i16:+32i32:+64i64:float("+5.0E10"):double("+5.00E10")
+80:-48i8:-16i16:-32i32:-64i64:float("+5.0E-10"):double("+5.00E-10")
+90:int8("48"):int16("-16"):int32("-32"):int64("-64"):float("+64"):double("+64")
+100:int8("+48i8"):int16("+16i16"):int32("+32i32"):int64("+64i64"):float("+5.0e+10"):double("+5.00e+10")
+110:+48i8:+16i16:+32i32:+64i64:float("+5.0E10"):double("+5.00E10")
+120:-48i8:-16i16:-32i32:-64i64:float("+5.0E-10"):double("+5.00E-10")
 

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ab4bed0c/asterixdb/asterix-app/src/test/resources/optimizerts/queries/aggregate/serial-agg.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/aggregate/serial-agg.sqlpp b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/aggregate/serial-agg.sqlpp
new file mode 100644
index 0000000..016921d
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/aggregate/serial-agg.sqlpp
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ */
+
+drop  dataverse test if exists;
+create  dataverse test;
+
+use test;
+
+
+create type test.TestType as
+{
+  id : bigint,
+  gid : bigint,
+  val : smallint
+};
+
+create  dataset Test(TestType) primary key id;
+
+select gid, stddev(t.val) as stddev
+from Test as t
+/* +hash */
+group by t.gid as gid;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ab4bed0c/asterixdb/asterix-app/src/test/resources/optimizerts/results/aggregate/serial-agg.plan
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/aggregate/serial-agg.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/aggregate/serial-agg.plan
new file mode 100644
index 0000000..a5d897d
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/aggregate/serial-agg.plan
@@ -0,0 +1,24 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- EXTERNAL_GROUP_BY[$$43]  |PARTITIONED|
+                  {
+                    -- AGGREGATE  |LOCAL|
+                      -- NESTED_TUPLE_SOURCE  |LOCAL|
+                  }
+            -- HASH_PARTITION_EXCHANGE [$$43]  |PARTITIONED|
+              -- EXTERNAL_GROUP_BY[$$38]  |PARTITIONED|
+                      {
+                        -- AGGREGATE  |LOCAL|
+                          -- NESTED_TUPLE_SOURCE  |LOCAL|
+                      }
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ASSIGN  |PARTITIONED|
+                      -- STREAM_PROJECT  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- DATASOURCE_SCAN  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ab4bed0c/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate-sql/agg_null/agg_null.3.query.aql
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate-sql/agg_null/agg_null.3.query.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate-sql/agg_null/agg_null.3.query.aql
index 15a560d..db3e6c1 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate-sql/agg_null/agg_null.3.query.aql
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate-sql/agg_null/agg_null.3.query.aql
@@ -24,4 +24,4 @@
 
 let $l1 := [null]
 let $l2 := {{null, null}}
-return { "sql-count1": sql-count($l1), "average1": sql-avg($l1), "sql-sum1": sql-sum($l1), "sql-min1": sql-min($l1), "sql-max1": sql-max($l1), "sql-count2": sql-count($l2), "average2": sql-avg($l2), "sql-sum2": sql-sum($l2), "sql-min2": sql-min($l2), "sql-max2": sql-max($l2) } 
+return { "sql-count1": sql-count($l1), "average1": sql-avg($l1), "sql-sum1": sql-sum($l1), "sql-min1": sql-min($l1), "sql-max1": sql-max($l1), "sql-stddev1": sql-stddev($l1), "sql-count2": sql-count($l2), "average2": sql-avg($l2), "sql-sum2": sql-sum($l2), "sql-min2": sql-min($l2), "sql-max2": sql-max($l2),  "sql-stddev2": sql-stddev($l2)}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ab4bed0c/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate-sql/agg_null_rec/agg_null_rec.3.query.aql
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate-sql/agg_null_rec/agg_null_rec.3.query.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate-sql/agg_null_rec/agg_null_rec.3.query.aql
index 0ffbe42..0e9081a 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate-sql/agg_null_rec/agg_null_rec.3.query.aql
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate-sql/agg_null_rec/agg_null_rec.3.query.aql
@@ -25,4 +25,4 @@
 use dataverse test;
 
 let $l := for $t in dataset Test return $t.valplus
-return { "sql-count": sql-count($l), "average": sql-avg($l), "sql-sum": sql-sum($l), "sql-min": sql-min($l), "sql-max": sql-max($l) }  
+return { "sql-count": sql-count($l), "average": sql-avg($l), "sql-stddev": sql-stddev($l), "sql-sum": sql-sum($l), "sql-min": sql-min($l), "sql-max": sql-max($l) }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ab4bed0c/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate-sql/agg_null_rec_1/agg_null_rec_1.3.query.aql
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate-sql/agg_null_rec_1/agg_null_rec_1.3.query.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate-sql/agg_null_rec_1/agg_null_rec_1.3.query.aql
index b584709..121264d 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate-sql/agg_null_rec_1/agg_null_rec_1.3.query.aql
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate-sql/agg_null_rec_1/agg_null_rec_1.3.query.aql
@@ -26,5 +26,5 @@ use dataverse test;
 
 let $l := for $t in dataset Test return $t
 return { "sql-count": sql-count($l), "average": sql-avg(for $i in $l return $i.val), "sql-sum":
-sql-sum(for $i in $l return $i.val), "sql-min": sql-min(for $i in $l return $i.valplus),
-"sql-max": sql-max(for $i in $l return $i.valplus) }
+sql-sum(for $i in $l return $i.val), "sql-stddev": sql-stddev(for $i in $l return $i.valplus),
+"sql-min": sql-min(for $i in $l return $i.valplus), "sql-max": sql-max(for $i in $l return $i.valplus) }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ab4bed0c/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate-sql/agg_number/agg_number.3.query.aql
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate-sql/agg_number/agg_number.3.query.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate-sql/agg_number/agg_number.3.query.aql
index db6c991..ea1db8a 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate-sql/agg_number/agg_number.3.query.aql
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate-sql/agg_number/agg_number.3.query.aql
@@ -29,5 +29,6 @@ let $a2 := sql-avg($l2)
 let $a3 := sql-sum($l2)
 let $a4 := sql-min($l2)
 let $a5 := sql-max($l2)
-return { "sql-count1": sql-count($l1), "average1": sql-avg($l1), "sql-sum1": sql-sum($l1), "sql-min1": sql-min($l1), "sql-max1": sql-max($l1), "sql-count2": $a1, "average2": $a2, "sql-sum2": $a3, "sql-min2": $a4, "sql-max2": $a5 }
+let $a6 := sql-stddev($l2)
+return { "sql-count1": sql-count($l1), "average1": sql-avg($l1), "sql-stddev1": sql-stddev($l1), "sql-sum1": sql-sum($l1), "sql-min1": sql-min($l1), "sql-max1": sql-max($l1), "sql-count2": $a1, "average2": $a2, "sql-stddev2": $a6, "sql-sum2": $a3, "sql-min2": $a4, "sql-max2": $a5 }
 

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ab4bed0c/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate-sql/agg_number_rec/agg_number_rec.3.query.aql
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate-sql/agg_number_rec/agg_number_rec.3.query.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate-sql/agg_number_rec/agg_number_rec.3.query.aql
index b7a42a0..522b50e 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate-sql/agg_number_rec/agg_number_rec.3.query.aql
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate-sql/agg_number_rec/agg_number_rec.3.query.aql
@@ -25,4 +25,4 @@
 use dataverse test;
 
 let $l := for $t in dataset Test return $t.valplus
-return { "sql-count": sql-count($l), "average": sql-avg($l), "sql-sum": sql-sum($l), "sql-min": sql-min($l), "sql-max": sql-max($l) }  
+return { "sql-count": sql-count($l), "average": sql-avg($l), "sql-stddev": sql-stddev($l), "sql-sum": sql-sum($l), "sql-min": sql-min($l), "sql-max": sql-max($l) }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ab4bed0c/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate/agg_null/agg_null.3.query.aql
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate/agg_null/agg_null.3.query.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate/agg_null/agg_null.3.query.aql
index 292e130..5f39d47 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate/agg_null/agg_null.3.query.aql
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate/agg_null/agg_null.3.query.aql
@@ -24,4 +24,4 @@
 
 let $l1 := [null]
 let $l2 := {{null, null}}
-return { "count1": count($l1), "average1": avg($l1), "sum1": sum($l1), "min1": min($l1), "max1": max($l1), "count2": count($l2), "average2": avg($l2), "sum2": sum($l2), "min2": min($l2), "max2": max($l2) } 
+return { "count1": count($l1), "average1": avg($l1), "sum1": sum($l1), "min1": min($l1), "max1": max($l1),"stddev1": stddev($l1), "count2": count($l2), "average2": avg($l2), "sum2": sum($l2), "min2": min($l2), "max2": max($l2), "stddev2": stddev($l2) }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ab4bed0c/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate/agg_null_rec/agg_null_rec.3.query.aql
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate/agg_null_rec/agg_null_rec.3.query.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate/agg_null_rec/agg_null_rec.3.query.aql
index d8e1d91..5b14f2d 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate/agg_null_rec/agg_null_rec.3.query.aql
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate/agg_null_rec/agg_null_rec.3.query.aql
@@ -25,4 +25,4 @@
 use dataverse test;
 
 let $l := for $t in dataset Test return $t.valplus
-return { "count": count($l), "average": avg($l), "sum": sum($l), "min": min($l), "max": max($l) }  
+return { "count": count($l), "average": avg($l), "stddev": stddev($l), "sum": sum($l), "min": min($l), "max": max($l) }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ab4bed0c/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate/agg_null_rec_1/agg_null_rec_1.3.query.aql
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate/agg_null_rec_1/agg_null_rec_1.3.query.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate/agg_null_rec_1/agg_null_rec_1.3.query.aql
index 415198a..5b8a017 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate/agg_null_rec_1/agg_null_rec_1.3.query.aql
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate/agg_null_rec_1/agg_null_rec_1.3.query.aql
@@ -26,5 +26,5 @@ use dataverse test;
 
 let $l := for $t in dataset Test return $t
 return { "count": count($l), "average": avg(for $i in $l return $i.val), "sum":
-sum(for $i in $l return $i.val), "min": min(for $i in $l return $i.valplus),
-"max": max(for $i in $l return $i.valplus) }
+sum(for $i in $l return $i.val), "stddev": stddev(for $i in $l return $i.val),
+"min": min(for $i in $l return $i.valplus), "max": max(for $i in $l return $i.valplus) }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ab4bed0c/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate/agg_number/agg_number.3.query.aql
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate/agg_number/agg_number.3.query.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate/agg_number/agg_number.3.query.aql
index 3e60dad..3ece422 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate/agg_number/agg_number.3.query.aql
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate/agg_number/agg_number.3.query.aql
@@ -29,5 +29,6 @@ let $a2 := avg($l2)
 let $a3 := sum($l2)
 let $a4 := min($l2)
 let $a5 := max($l2)
-return { "count1": count($l1), "average1": avg($l1), "sum1": sum($l1), "min1": min($l1), "max1": max($l1), "count2": $a1, "average2": $a2, "sum2": $a3, "min2": $a4, "max2": $a5 }
+let $a6 := stddev($l2)
+return { "count1": count($l1), "average1": avg($l1), "stddev1": stddev($l1), "sum1": sum($l1), "min1": min($l1), "max1": max($l1), "count2": $a1, "average2": $a2, "stddev2": $a6, "sum2": $a3, "min2": $a4, "max2": $a5 }
 

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ab4bed0c/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate/agg_number_rec/agg_number_rec.3.query.aql
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate/agg_number_rec/agg_number_rec.3.query.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate/agg_number_rec/agg_number_rec.3.query.aql
index 1ad04fa..220ff31 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate/agg_number_rec/agg_number_rec.3.query.aql
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries/aggregate/agg_number_rec/agg_number_rec.3.query.aql
@@ -25,4 +25,4 @@
 use dataverse test;
 
 let $l := for $t in dataset Test return $t.valplus
-return { "count": count($l), "average": avg($l), "sum": sum($l), "min": min($l), "max": max($l) }  
+return { "count": count($l), "average": avg($l), "stddev": stddev($l), "sum": sum($l), "min": min($l), "max": max($l) }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ab4bed0c/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/agg_null/agg_null.3.query.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/agg_null/agg_null.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/agg_null/agg_null.3.query.sqlpp
index 911bb59..9fd31d1 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/agg_null/agg_null.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/agg_null/agg_null.3.query.sqlpp
@@ -22,4 +22,4 @@
 * Date         : Feb 7th 2014
 */
 
-{'sql-count1':array_count([null]),'average1':array_avg([null]),'sql-sum1':array_sum([null]),'sql-min1':array_min([null]),'sql-max1':array_max([null]),'sql-count2':array_count({{null,null}}),'average2':array_avg({{null,null}}),'sql-sum2':array_sum({{null,null}}),'sql-min2':array_min({{null,null}}),'sql-max2':array_max({{null,null}})};
+{'sql-count1':array_count([null]),'average1':array_avg([null]),'sql-sum1':array_sum([null]),'sql-min1':array_min([null]),'sql-max1':array_max([null]),'sql-stddev1':array_stddev([null]),'sql-count2':array_count({{null,null}}),'average2':array_avg({{null,null}}),'sql-sum2':array_sum({{null,null}}),'sql-min2':array_min({{null,null}}),'sql-max2':array_max({{null,null}}),'sql-stddev2':array_stddev({{null,null}})};

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ab4bed0c/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/agg_null_rec/agg_null_rec.3.query.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/agg_null_rec/agg_null_rec.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/agg_null_rec/agg_null_rec.3.query.sqlpp
index 1307ccc..b5bdd81 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/agg_null_rec/agg_null_rec.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/agg_null_rec/agg_null_rec.3.query.sqlpp
@@ -40,4 +40,7 @@ use test;
 )),'sql-max':test.array_max((
     select element t.valplus
     from  Test as t
+)),'sql-stddev':test.array_stddev((
+    select element t.valplus
+    from  Test as t
 ))};

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ab4bed0c/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/agg_null_rec_1/agg_null_rec_1.3.query.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/agg_null_rec_1/agg_null_rec_1.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/agg_null_rec_1/agg_null_rec_1.3.query.sqlpp
index 629a7bb..13c8be1 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/agg_null_rec_1/agg_null_rec_1.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/agg_null_rec_1/agg_null_rec_1.3.query.sqlpp
@@ -52,4 +52,10 @@ use test;
         select element t
         from  Test as t
     ) as i
+)),'sql-stddev':test.array_stddev((
+    select element i.valplus
+    from  (
+        select element t
+        from  Test as t
+    ) as i
 ))};

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ab4bed0c/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/agg_number/agg_number.3.query.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/agg_number/agg_number.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/agg_number/agg_number.3.query.sqlpp
index cc5aaa0..4776925 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/agg_number/agg_number.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/agg_number/agg_number.3.query.sqlpp
@@ -22,4 +22,4 @@
 * Date         : Feb 7th 2014
 */
 
-{'sql-count1':array_count([float('2.0'),double('3.0'),93847382783847382,1]),'average1':array_avg([float('2.0'),double('3.0'),93847382783847382,1]),'sql-sum1':array_sum([float('2.0'),double('3.0'),93847382783847382,1]),'sql-min1':array_min([float('2.0'),double('3.0'),93847382783847382,1]),'sql-max1':array_max([float('2.0'),double('3.0'),93847382783847382,1]),'sql-count2':array_count({{float('2.0'),double('3.0'),93847382783847382,1}}),'average2':array_avg({{float('2.0'),double('3.0'),93847382783847382,1}}),'sql-sum2':array_sum({{float('2.0'),double('3.0'),93847382783847382,1}}),'sql-min2':array_min({{float('2.0'),double('3.0'),93847382783847382,1}}),'sql-max2':array_max({{float('2.0'),double('3.0'),93847382783847382,1}})};
+{'sql-count1':array_count([float('2.0'),double('3.0'),93847382783847382,1]),'average1':array_avg([float('2.0'),double('3.0'),93847382783847382,1]),'sql-sum1':array_sum([float('2.0'),double('3.0'),93847382783847382,1]),'sql-min1':array_min([float('2.0'),double('3.0'),93847382783847382,1]),'sql-max1':array_max([float('2.0'),double('3.0'),93847382783847382,1]),'sql-stddev1':array_stddev([float('2.0'),double('3.0'),93847382783847382,1]),'sql-count2':array_count({{float('2.0'),double('3.0'),93847382783847382,1}}),'average2':array_avg({{float('2.0'),double('3.0'),93847382783847382,1}}),'sql-sum2':array_sum({{float('2.0'),double('3.0'),93847382783847382,1}}),'sql-min2':array_min({{float('2.0'),double('3.0'),93847382783847382,1}}),'sql-max2':array_max({{float('2.0'),double('3.0'),93847382783847382,1}}),'sql-stddev2':array_stddev({{float('2.0'),double('3.0'),93847382783847382,1}})};

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ab4bed0c/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/agg_number_rec/agg_number_rec.3.query.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/agg_number_rec/agg_number_rec.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/agg_number_rec/agg_number_rec.3.query.sqlpp
index 8476060..faec87a 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/agg_number_rec/agg_number_rec.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/agg_number_rec/agg_number_rec.3.query.sqlpp
@@ -40,4 +40,7 @@ use test;
 )),'sql-max':test.array_max((
     select element t.valplus
     from  Test as t
+)),'sql-stddev':test.array_stddev((
+    select element t.valplus
+    from  Test as t
 ))};

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ab4bed0c/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/scalar_stddev/scalar_stddev.1.ddl.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/scalar_stddev/scalar_stddev.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/scalar_stddev/scalar_stddev.1.ddl.sqlpp
new file mode 100644
index 0000000..fbd4e19
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/scalar_stddev/scalar_stddev.1.ddl.sqlpp
@@ -0,0 +1,26 @@
+/*
+ * 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.
+ */
+/*
+ * Description    : Tests the scalar version of array_avg without nulls.
+ * Success        : Yes
+ */
+
+drop  dataverse test if exists;
+create  dataverse test;
+

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ab4bed0c/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/scalar_stddev/scalar_stddev.3.query.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/scalar_stddev/scalar_stddev.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/scalar_stddev/scalar_stddev.3.query.sqlpp
new file mode 100644
index 0000000..8a4ed23
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/scalar_stddev/scalar_stddev.3.query.sqlpp
@@ -0,0 +1,35 @@
+/*
+ * 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.
+ */
+/*
+ * Description    : Tests the scalar version of array_stddev without nulls.
+ * Success        : Yes
+ */
+
+use test;
+
+
+with  i8 as test.array_stddev([test.tinyint('1'),test.tinyint('2'),test.tinyint('3')]),
+      i16 as test.array_stddev([test.smallint('1'),test.smallint('2'),test.smallint('3')]),
+      i32 as test.array_stddev([test.integer('1'),test.integer('2'),test.integer('3')]),
+      i64 as test.array_stddev([test.bigint('1'),test.bigint('2'),test.bigint('3')]),
+      f as test.array_stddev([test.float('1'),test.float('2'),test.float('3')]),
+      d as test.array_stddev([test.double('1'),test.double('2'),test.double('3')])
+select element i
+from  [i8,i16,i32,i64,f,d] as i
+;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ab4bed0c/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/scalar_stddev_empty/scalar_stddev_empty.1.ddl.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/scalar_stddev_empty/scalar_stddev_empty.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/scalar_stddev_empty/scalar_stddev_empty.1.ddl.sqlpp
new file mode 100644
index 0000000..430406c
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/scalar_stddev_empty/scalar_stddev_empty.1.ddl.sqlpp
@@ -0,0 +1,26 @@
+/*
+ * 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.
+ */
+/*
+ * Description    : Tests the scalar version of array_avg with an empty list.
+ * Success        : Yes
+ */
+
+drop  dataverse test if exists;
+create  dataverse test;
+

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ab4bed0c/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/scalar_stddev_empty/scalar_stddev_empty.3.query.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/scalar_stddev_empty/scalar_stddev_empty.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/scalar_stddev_empty/scalar_stddev_empty.3.query.sqlpp
new file mode 100644
index 0000000..2b01753
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/scalar_stddev_empty/scalar_stddev_empty.3.query.sqlpp
@@ -0,0 +1,24 @@
+/*
+ * 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.
+ */
+/*
+ * Description    : Tests the scalar version of array_stddev with an empty list.
+ * Success        : Yes
+ */
+
+select element array_stddev([]);

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ab4bed0c/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/scalar_stddev_null/scalar_stddev_null.1.ddl.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/scalar_stddev_null/scalar_stddev_null.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/scalar_stddev_null/scalar_stddev_null.1.ddl.sqlpp
new file mode 100644
index 0000000..87b10c9
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/scalar_stddev_null/scalar_stddev_null.1.ddl.sqlpp
@@ -0,0 +1,26 @@
+/*
+ * 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.
+ */
+/*
+ * Description    : Tests the scalar version of array_avg with nulls.
+ * Success        : Yes
+ */
+
+drop  dataverse test if exists;
+create  dataverse test;
+

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ab4bed0c/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/scalar_stddev_null/scalar_stddev_null.3.query.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/scalar_stddev_null/scalar_stddev_null.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/scalar_stddev_null/scalar_stddev_null.3.query.sqlpp
new file mode 100644
index 0000000..e49076d
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/scalar_stddev_null/scalar_stddev_null.3.query.sqlpp
@@ -0,0 +1,35 @@
+/*
+ * 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.
+ */
+/*
+ * Description    : Tests the scalar version of array_stddev with nulls.
+ * Success        : Yes
+ */
+
+use test;
+
+
+with  i8 as test.array_stddev([test.tinyint('1'),test.tinyint('2'),test.tinyint('3'),null]),
+      i16 as test.array_stddev([test.smallint('1'),test.smallint('2'),test.smallint('3'),null]),
+      i32 as test.array_stddev([test.integer('1'),test.integer('2'),test.integer('3'),null]),
+      i64 as test.array_stddev([test.bigint('1'),test.bigint('2'),test.bigint('3'),null]),
+      f as test.array_stddev([test.float('1'),test.float('2'),test.float('3'),null]),
+      d as test.array_stddev([test.double('1'),test.double('2'),test.double('3'),null])
+select element i
+from  [i8,i16,i32,i64,f,d] as i
+;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ab4bed0c/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/serial_stddev_double/serial_stddev_double.1.ddl.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/serial_stddev_double/serial_stddev_double.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/serial_stddev_double/serial_stddev_double.1.ddl.sqlpp
new file mode 100644
index 0000000..da0bd7b
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/serial_stddev_double/serial_stddev_double.1.ddl.sqlpp
@@ -0,0 +1,33 @@
+/*
+ * 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.
+ */
+
+drop  dataverse test if exists;
+create  dataverse test;
+
+use test;
+
+
+create type test.TestType as
+{
+  id : bigint,
+  gid : bigint,
+  val : double
+};
+
+create  dataset Test(TestType) primary key id;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ab4bed0c/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/serial_stddev_double/serial_stddev_double.2.update.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/serial_stddev_double/serial_stddev_double.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/serial_stddev_double/serial_stddev_double.2.update.sqlpp
new file mode 100644
index 0000000..88d820c
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/serial_stddev_double/serial_stddev_double.2.update.sqlpp
@@ -0,0 +1,31 @@
+/*
+ * 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.
+ */
+
+use test;
+
+insert into Test
+select element {'id':0,'gid':1,'val':double(4.32),'valplus':double(473847.0)};
+insert into Test
+select element {'id':1,'gid':1,'val':double(5.32)};
+insert into Test
+select element {'id':2,'gid':1,'val':double(6.32),'valplus':double(38473827484738239.0)};
+insert into Test
+select element {'id':3,'gid':1,'val':double(4.32),'valplus':double(678900.0)};
+insert into Test
+select element {'id':4,'gid':1,'val':double(4.32),'valplus':null};

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ab4bed0c/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/serial_stddev_double/serial_stddev_double.3.query.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/serial_stddev_double/serial_stddev_double.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/serial_stddev_double/serial_stddev_double.3.query.sqlpp
new file mode 100644
index 0000000..1219f2e
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/serial_stddev_double/serial_stddev_double.3.query.sqlpp
@@ -0,0 +1,25 @@
+/*
+ * 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.
+ */
+
+use test;
+
+select gid, stddev(t.val) as stddev
+from Test as t
+/* +hash */
+group by t.gid as gid;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ab4bed0c/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/serial_stddev_double_null/serial_stddev_double_null.1.ddl.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/serial_stddev_double_null/serial_stddev_double_null.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/serial_stddev_double_null/serial_stddev_double_null.1.ddl.sqlpp
new file mode 100644
index 0000000..da0bd7b
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/serial_stddev_double_null/serial_stddev_double_null.1.ddl.sqlpp
@@ -0,0 +1,33 @@
+/*
+ * 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.
+ */
+
+drop  dataverse test if exists;
+create  dataverse test;
+
+use test;
+
+
+create type test.TestType as
+{
+  id : bigint,
+  gid : bigint,
+  val : double
+};
+
+create  dataset Test(TestType) primary key id;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ab4bed0c/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/serial_stddev_double_null/serial_stddev_double_null.2.update.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/serial_stddev_double_null/serial_stddev_double_null.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/serial_stddev_double_null/serial_stddev_double_null.2.update.sqlpp
new file mode 100644
index 0000000..88d820c
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/serial_stddev_double_null/serial_stddev_double_null.2.update.sqlpp
@@ -0,0 +1,31 @@
+/*
+ * 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.
+ */
+
+use test;
+
+insert into Test
+select element {'id':0,'gid':1,'val':double(4.32),'valplus':double(473847.0)};
+insert into Test
+select element {'id':1,'gid':1,'val':double(5.32)};
+insert into Test
+select element {'id':2,'gid':1,'val':double(6.32),'valplus':double(38473827484738239.0)};
+insert into Test
+select element {'id':3,'gid':1,'val':double(4.32),'valplus':double(678900.0)};
+insert into Test
+select element {'id':4,'gid':1,'val':double(4.32),'valplus':null};

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ab4bed0c/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/serial_stddev_double_null/serial_stddev_double_null.3.query.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/serial_stddev_double_null/serial_stddev_double_null.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/serial_stddev_double_null/serial_stddev_double_null.3.query.sqlpp
new file mode 100644
index 0000000..2125b05
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/serial_stddev_double_null/serial_stddev_double_null.3.query.sqlpp
@@ -0,0 +1,25 @@
+/*
+ * 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.
+ */
+
+use test;
+
+select gid, stddev(t.valplus) as stddev
+from Test as t
+/* +hash */
+group by t.gid as gid;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ab4bed0c/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/serial_stddev_empty/serial_stddev_empty.1.ddl.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/serial_stddev_empty/serial_stddev_empty.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/serial_stddev_empty/serial_stddev_empty.1.ddl.sqlpp
new file mode 100644
index 0000000..da0bd7b
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/serial_stddev_empty/serial_stddev_empty.1.ddl.sqlpp
@@ -0,0 +1,33 @@
+/*
+ * 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.
+ */
+
+drop  dataverse test if exists;
+create  dataverse test;
+
+use test;
+
+
+create type test.TestType as
+{
+  id : bigint,
+  gid : bigint,
+  val : double
+};
+
+create  dataset Test(TestType) primary key id;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ab4bed0c/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/serial_stddev_empty/serial_stddev_empty.3.query.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/serial_stddev_empty/serial_stddev_empty.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/serial_stddev_empty/serial_stddev_empty.3.query.sqlpp
new file mode 100644
index 0000000..1219f2e
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/serial_stddev_empty/serial_stddev_empty.3.query.sqlpp
@@ -0,0 +1,25 @@
+/*
+ * 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.
+ */
+
+use test;
+
+select gid, stddev(t.val) as stddev
+from Test as t
+/* +hash */
+group by t.gid as gid;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ab4bed0c/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/serial_stddev_float/serial_stddev_float.1.ddl.sqlpp
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/serial_stddev_float/serial_stddev_float.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/serial_stddev_float/serial_stddev_float.1.ddl.sqlpp
new file mode 100644
index 0000000..ddac6a0
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/aggregate-sql/serial_stddev_float/serial_stddev_float.1.ddl.sqlpp
@@ -0,0 +1,33 @@
+/*
+ * 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.
+ */
+
+drop  dataverse test if exists;
+create  dataverse test;
+
+use test;
+
+
+create type test.TestType as
+{
+  id : bigint,
+  gid : bigint,
+  val : float
+};
+
+create  dataset Test(TestType) primary key id;