diff --git a/sqlglot/dialects/snowflake.py b/sqlglot/dialects/snowflake.py index d3e4ada469..b90d17cfba 100644 --- a/sqlglot/dialects/snowflake.py +++ b/sqlglot/dialects/snowflake.py @@ -804,6 +804,7 @@ class Parser(parser.Parser): "SHA2_BINARY": exp.SHA2Digest.from_arg_list, "SHA2_HEX": exp.SHA2.from_arg_list, "SQUARE": lambda args: exp.Pow(this=seq_get(args, 0), expression=exp.Literal.number(2)), + "STDDEV_SAMP": exp.Stddev.from_arg_list, "STRTOK": _build_strtok, "SYSDATE": lambda args: exp.CurrentTimestamp(this=seq_get(args, 0), sysdate=True), "TABLE": lambda args: exp.TableFromRows(this=seq_get(args, 0)), diff --git a/tests/dialects/test_snowflake.py b/tests/dialects/test_snowflake.py index 0a05bdf4d7..00dc446c4c 100644 --- a/tests/dialects/test_snowflake.py +++ b/tests/dialects/test_snowflake.py @@ -474,6 +474,14 @@ def test_snowflake(self): self.validate_identity("WEEKOFYEAR(tstamp)", "WEEK(tstamp)") self.validate_identity("SELECT QUARTER(CURRENT_TIMESTAMP())") self.validate_identity("SELECT SUM(amount) FROM mytable GROUP BY ALL") + self.validate_identity("SELECT STDDEV(x)") + self.validate_identity("SELECT STDDEV(x) OVER (PARTITION BY 1)") + self.validate_identity("SELECT STDDEV_POP(x)") + self.validate_identity("SELECT STDDEV_POP(x) OVER (PARTITION BY 1)") + self.validate_identity("SELECT STDDEV_SAMP(x)", "SELECT STDDEV(x)") + self.validate_identity( + "SELECT STDDEV_SAMP(x) OVER (PARTITION BY 1)", "SELECT STDDEV(x) OVER (PARTITION BY 1)" + ) self.validate_identity("WITH x AS (SELECT 1 AS foo) SELECT foo FROM IDENTIFIER('x')") self.validate_identity("WITH x AS (SELECT 1 AS foo) SELECT IDENTIFIER('foo') FROM x") self.validate_identity("INITCAP('iqamqinterestedqinqthisqtopic', 'q')") diff --git a/tests/fixtures/optimizer/annotate_functions.sql b/tests/fixtures/optimizer/annotate_functions.sql index ea7ba52b56..b152223aa2 100644 --- a/tests/fixtures/optimizer/annotate_functions.sql +++ b/tests/fixtures/optimizer/annotate_functions.sql @@ -4092,6 +4092,30 @@ BOOLEAN; SEARCH_IP(col, '192.168.0.0'); BOOLEAN; +# dialect: snowflake +STDDEV(tbl.double_col); +DOUBLE; + +# dialect: snowflake +STDDEV(tbl.double_col) OVER (PARTITION BY 1); +DOUBLE; + +# dialect: snowflake +STDDEV_POP(tbl.double_col); +DOUBLE; + +# dialect: snowflake +STDDEV_POP(tbl.double_col) OVER (PARTITION BY 1); +DOUBLE; + +# dialect: snowflake +STDDEV_SAMP(tbl.double_col); +DOUBLE; + +# dialect: snowflake +STDDEV_SAMP(tbl.double_col) OVER (PARTITION BY 1); +DOUBLE; + # dialect: snowflake STRTOK_TO_ARRAY('a,b,c', ','); ARRAY;