diff --git a/ydb/library/yql/sql/v1/sql_expression.cpp b/ydb/library/yql/sql/v1/sql_expression.cpp index 74a7a72a18b1..7bea5024c8ac 100644 --- a/ydb/library/yql/sql/v1/sql_expression.cpp +++ b/ydb/library/yql/sql/v1/sql_expression.cpp @@ -1299,7 +1299,7 @@ TNodePtr TSqlExpression::CaseRule(const TRule_case_expr& rule) { TSqlExpression condExpr(Ctx, Mode); branches.back().Pred = condExpr.Build(block.GetRule_expr2()); if (caseExpr) { - branches.back().Pred = BuildBinaryOp(Ctx, Ctx.Pos(), "==", caseExpr, branches.back().Pred); + branches.back().Pred = BuildBinaryOp(Ctx, Ctx.Pos(), "==", caseExpr->Clone(), branches.back().Pred); } if (!branches.back().Pred) { return {}; @@ -1998,7 +1998,7 @@ TSqlExpression::TCaseBranch TSqlExpression::ReduceCaseBranches(TVector { + RETURN + CASE + WHEN $period = 'd' THEN $day + WHEN $period = 'w' THEN DateTime::MakeDate(DateTime::StartOfWeek($day)) + WHEN $period = 'm' THEN DateTime::MakeDate(DateTime::StartOfMonth($day)) + ELSE $day + END +}; + +$data = +SELECT + $round_period(day, 'd') AS day, + $round_period(day, 'w') AS week, + $round_period(day, 'm') AS month, + IF(user_card_cnt <= 10, user_card_cnt, 11) AS user_cards_segm, + is_proven_owner, + user_id, +FROM ( + SELECT + Date("2024-04-29") AS day, + "ALLO" AS mark, + "???" AS model, + 5 AS user_card_cnt, + 'ACTIVE' AS status, + 999 AS user_id, + 1 AS is_proven_owner, + UNION ALL + SELECT + Date("2024-04-29") AS day, + "ALLO" AS mark, + "!!!!!!" AS model, + 50 AS user_card_cnt, + 'ACTIVE' AS status, + 1111 AS user_id, + 0 AS is_proven_owner, +); + +SELECT + day, + GROUPING(day) AS grouping_day, + week, + GROUPING(week) AS grouping_week, + month, + GROUPING(month) as grouping_month, + CASE + WHEN GROUPING(week) == 1 AND GROUPING(month) == 1 THEN 'd' + WHEN GROUPING(day) == 1 AND GROUPING(month) == 1 THEN 'w' + WHEN GROUPING(day) == 1 AND GROUPING(week) == 1 THEN 'm' + ELSE NULL + END AS period_type, + user_cards_segm, + if(GROUPING(user_cards_segm) = 1, -300, user_cards_segm) AS __user_cards_segm__, + GROUPING(user_cards_segm) as grouping_user_cards_segm, + COUNT(DISTINCT user_id) AS all_user_qty, +FROM $data AS t +GROUP BY + GROUPING SETS( + -- day grouping + (day), + (day, user_cards_segm), + -- -- week grouping + (week), + (week, user_cards_segm), + -- -- month grouping + (month), + (month, user_cards_segm) + ) diff --git a/ydb/library/yql/tests/sql/yt_native_file/part12/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part12/canondata/result.json index 64bed86ad4ff..22fb1338becd 100644 --- a/ydb/library/yql/tests/sql/yt_native_file/part12/canondata/result.json +++ b/ydb/library/yql/tests/sql/yt_native_file/part12/canondata/result.json @@ -239,16 +239,16 @@ ], "test.test[aggregate-group_by_rollup_grouping_hum--Debug]": [ { - "checksum": "4ef768471dd9fccaafde00aa56310ffa", - "size": 9853, - "uri": "https://{canondata_backend}/1809005/977edd58b353af582025a25127f98ea301dd01a5/resource.tar.gz#test.test_aggregate-group_by_rollup_grouping_hum--Debug_/opt.yql" + "checksum": "9da92c19263936a6edf484323a4739bd", + "size": 9863, + "uri": "https://{canondata_backend}/1924537/ecb5b23ceaf7191462db08eb0bd1c3a6b0a9be3a/resource.tar.gz#test.test_aggregate-group_by_rollup_grouping_hum--Debug_/opt.yql" } ], "test.test[aggregate-group_by_rollup_grouping_hum--Plan]": [ { - "checksum": "0d6d807bd49dea9da866a475f4cbc3a9", + "checksum": "71e9dccb832ca9ab92776f9e31ae85eb", "size": 12250, - "uri": "https://{canondata_backend}/1809005/977edd58b353af582025a25127f98ea301dd01a5/resource.tar.gz#test.test_aggregate-group_by_rollup_grouping_hum--Plan_/plan.txt" + "uri": "https://{canondata_backend}/1924537/ecb5b23ceaf7191462db08eb0bd1c3a6b0a9be3a/resource.tar.gz#test.test_aggregate-group_by_rollup_grouping_hum--Plan_/plan.txt" } ], "test.test[aggregate-group_by_rollup_grouping_hum--Results]": [ diff --git a/ydb/library/yql/tests/sql/yt_native_file/part13/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part13/canondata/result.json index 0651fb01515f..5cb4f08f9835 100644 --- a/ydb/library/yql/tests/sql/yt_native_file/part13/canondata/result.json +++ b/ydb/library/yql/tests/sql/yt_native_file/part13/canondata/result.json @@ -358,6 +358,27 @@ "uri": "file://test.test_aggregate-table_funcs_group_by-default.txt-Results_/extracted" } ], + "test.test[aggregate-yql-18511--Debug]": [ + { + "checksum": "91e08be96e1cdc41ab2b5d99cb5a9873", + "size": 4994, + "uri": "https://{canondata_backend}/1689644/c0f46178539faf548e942cfa605777b1db80a183/resource.tar.gz#test.test_aggregate-yql-18511--Debug_/opt.yql" + } + ], + "test.test[aggregate-yql-18511--Plan]": [ + { + "checksum": "b4dd508a329723c74293d80f0278c705", + "size": 505, + "uri": "https://{canondata_backend}/1689644/c0f46178539faf548e942cfa605777b1db80a183/resource.tar.gz#test.test_aggregate-yql-18511--Plan_/plan.txt" + } + ], + "test.test[aggregate-yql-18511--Results]": [ + { + "checksum": "8e843998b10eabfd56dac6e4866dec47", + "size": 9260, + "uri": "https://{canondata_backend}/1689644/c0f46178539faf548e942cfa605777b1db80a183/resource.tar.gz#test.test_aggregate-yql-18511--Results_/results.txt" + } + ], "test.test[bigdate-compare_small_big-default.txt-Debug]": [ { "checksum": "ad3bd9df4b0035d680ea8db2fe4e6944",