作者:胖头鱼的鱼缸(尹海文) Oracle ACE Pro: Database PostgreSQL ACE 10年+数据库行业经验 拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证 墨天轮MVP,ITPUB认证专家 圈内拥有“总监”称号,非著 名社恐(社交恐怖分子) 全网同名:胖头鱼的鱼缸 ITPUB:yhw1809 除授权转载并标明出处外,均为“非法”抄袭
Oracle AI Database 23.26.1 引入了 GROUP BY ALL 子句,用于简化聚合查询的编写。GROUP BY ALL 会自动将 SELECT 列表中所有非聚合列作为分组依据,开发者无需手动列出每个分组列。
SELECT col1, col2, ..., AGG(colN), ... FROM table_name GROUP BY ALL;
行为细节:
与传统 GROUP BY 对比:
SELECT product, region, SUM(amount) FROM sales GROUP BY product, region;
SELECT product, region, SUM(amount) FROM sales GROUP BY ALL;
优势:
同之前一样,使用用户NFTEST,已授权DB_DEVELOPER_ROLE角色,测试操作均在NFTEST用户下执行。
CREATE TABLE groupby_sales ( sale_id NUMBER PRIMARY KEY, product VARCHAR2(30), region VARCHAR2(30), category VARCHAR2(20), amount NUMBER, sale_date DATE); INSERT INTO groupby_sales VALUES (1, 'Widget', 'East', 'Electronics', 100, DATE '2026-01-15'); INSERT INTO groupby_sales VALUES (2, 'Widget', 'West', 'Electronics', 150, DATE '2026-01-20'); INSERT INTO groupby_sales VALUES (3, 'Gadget', 'East', 'Electronics', 200, DATE '2026-02-10'); INSERT INTO groupby_sales VALUES (4, 'Gadget', 'West', 'Electronics', 120, DATE '2026-02-15'); INSERT INTO groupby_sales VALUES (5, 'Widget', 'East', 'Electronics', 80, DATE '2026-03-01'); INSERT INTO groupby_sales VALUES (6, 'Gadget', 'West', 'Electronics', 300, DATE '2026-03-05'); INSERT INTO groupby_sales VALUES (7, 'Tablet', 'East', 'Mobile', 250, DATE '2026-01-10'); INSERT INTO groupby_sales VALUES (8, 'Tablet', 'West', 'Mobile', 180, DATE '2026-02-20'); INSERT INTO groupby_sales VALUES (9, 'Phone', 'North', 'Mobile', 400, DATE '2026-03-10'); INSERT INTO groupby_sales VALUES (10,'Phone', 'North', 'Mobile', 350, DATE '2026-03-15'); COMMIT;

SELECT product, region, SUM(amount) AS total_sales, COUNT(*) AS sale_count FROM groupby_sales GROUP BY product, region ORDER BY total_sales DESC; SELECT product, region, SUM(amount) AS total_sales, COUNT(*) AS sale_count FROM groupby_sales GROUP BY ALL ORDER BY total_sales DESC;

SELECT product, region, category, SUM(amount) AS total_sales, AVG(amount) AS avg_sale, MIN(amount) AS min_sale, MAX(amount) AS max_sale FROM groupby_sales GROUP BY ALL ORDER BY category, product, region;

SELECT COUNT(*) AS total_sales_count, SUM(amount) AS grand_total, AVG(amount) AS average_sale, MIN(amount) AS smallest_sale, MAX(amount) AS largest_sale FROM groupby_sales GROUP BY ALL;

SELECT product, region, SUM(amount) AS total_sales FROM groupby_sales GROUP BY ALLHAVING SUM(amount) > 25 0ORDER BY total_sales DESC;

SELECT product, region, CASE WHEN EXTRACT(MONTH FROM sale_date) <= 3 THEN 'Q1-2026' ELSE 'Q2-2026' END AS quarter, SUM(amount) AS total_sales, COUNT(*) AS num_sales FROM groupby_sales GROUP BY ALL ORDER BY product, region, quarter;

本期对 Oracle AI Database 26ai,23.26.1 版本新引入的 GROUP BY ALL 子句进行了完整介绍与实战演示。
老规矩,知道写了些啥。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31466763/viewspace-3177985/ ,如需转载,请注明出处,否则将追究法律责任。