diff --git a/src/parser.rs b/src/parser.rs index 6d917f027..7b0506548 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -2680,10 +2680,13 @@ impl<'a> Parser<'a> { None }; - let group_by = if self.parse_keywords(&[Keyword::GROUP, Keyword::BY]) { - self.parse_comma_separated(Parser::parse_group_by_expr)? - } else { - vec![] + let mut group_by = vec![]; + if self.parse_keywords(&[Keyword::GROUP, Keyword::BY]) { + let is_l_parent = self.consume_token(&Token::LParen); + group_by = self.parse_comma_separated(Parser::parse_group_by_expr)?; + if is_l_parent { + self.consume_token(&Token::RParen); + } }; let cluster_by = if self.parse_keywords(&[Keyword::CLUSTER, Keyword::BY]) { diff --git a/tests/sqlparser_common.rs b/tests/sqlparser_common.rs index 07a0db524..255d6a8f5 100644 --- a/tests/sqlparser_common.rs +++ b/tests/sqlparser_common.rs @@ -1096,6 +1096,10 @@ fn parse_select_group_by() { ], select.group_by ); + one_statement_parses_to( + "SELECT id, fname, lname FROM customer GROUP BY (lname, fname)", + sql, + ); } #[test]