From 290ba655da6049e62a69b8a68e168e1057c24887 Mon Sep 17 00:00:00 2001 From: ulleo Date: Mon, 24 Nov 2025 15:06:50 +0800 Subject: [PATCH] perf: improve generate Oracle SQL --- backend/templates/sql_examples/Oracle.yaml | 29 ++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/backend/templates/sql_examples/Oracle.yaml b/backend/templates/sql_examples/Oracle.yaml index f50fde50..5281f597 100644 --- a/backend/templates/sql_examples/Oracle.yaml +++ b/backend/templates/sql_examples/Oracle.yaml @@ -18,6 +18,9 @@ template: 1. 传统写法:WHERE ROWNUM <= 100 2. 现代写法:FETCH FIRST 100 ROWS ONLY + + 使用传统 ROWNUM 写法时,若遇到需要分组 GROUP BY 的情况,需要将限制条数的 ROWNUM 写在最外层,不然会影响最后查询出数据的总条数 + other_rule: | @@ -71,6 +74,32 @@ template: AND ROWNUM <= 1000 + + + 统计用户表 PUBLIC.USERS 各部门人数 + + SELECT + "u"."DEPARTMENT" AS "department_name", + count(*) AS "user_count" + FROM "PUBLIC"."USERS" "u" + WHERE "u"."status" = 1 + AND ROWNUM <= 100 + GROUP BY "u"."DEPARTMENT" + ORDER BY "department_name" -- 错误:ROWNUM 应当写在最外层,这样会导致查询结果条数比实际数据的数量少 + + + SELECT "department_name", "user_count" FROM ( + SELECT + "u"."DEPARTMENT" AS "department_name", + count(*) AS "user_count" + FROM "PUBLIC"."USERS" "u" + WHERE "u"."status" = 1 + GROUP BY "u"."DEPARTMENT" + ORDER BY "department_name" + ) + WHERE ROWNUM <= 100 + + example_engine: Oracle 19c