Gruop by 你用对了吗?
偶然间在学习过程中看到一篇博客文章,看到在讲解group by? 查看后发现和平时的语法不太一致,在学习后纪录此篇文章。
本次演示环境为 SQL SERVER 2012
其他语言可能存在语法偏差,有兴趣的可以自己尝试。

创建表和测试数据
-- 创建测试表
-- salesperson 销售人员姓名
-- sales_department 销售部门
-- sales_quantity 销售数量
CREATE TABLE dbo.sales_data (
salesperson NVARCHAR(50),
sales_department NVARCHAR(50),
sales_quantity INT
);
-- 插入测试数据
INSERT INTO dbo.sales_data (salesperson, sales_department, sales_quantity)
VALUES
('张三', '销售一部', 10),
('李四', '销售一部', 15),
('王五', '销售二部', 20),
('赵六', '销售二部', 25),
('孙七', '销售三部', 30),
('周八', '销售三部', 35);
-- 查询插入的数据以验证
SELECT * FROM sales_data;
ROLLUP 的使用
-- 按销售部门和销售人员姓名进行分组,并计算销售数量的总和
SELECT sales_department, salesperson, SUM(sales_quantity) AS total_sales
FROM sales_data
GROUP BY ROLLUP(sales_department, salesperson)
ORDER BY sales_department DESC ;

可以看到对每一个部门销售人员的销售数量总和,以及总计。
-- 按销售部门进行分组,并计算销售数量的总和
SELECT sales_department, SUM(sales_quantity) AS total_sales
FROM sales_data
GROUP BY ROLLUP(sales_department)
ORDER BY sales_department DESC;

可以看到,当我们使用ROLLUP时,会在最后一行显示总计。
通过 GROUP BY 对数据进行分组,SUM 函数计算每个分组的销售总量,ROLLUP 操作生成各级别的汇总数据,使得查询结果不仅包含明细信息,还包含了有用的统计汇总信息,方便进行数据分析和报表生成。
CUBE 的使用
CUBE 和 ROLLUP 对参数的处理是不同的,CUBE 会对每一个参数进行汇总,而 ROLLUP 只会对最后一个参数进行汇总。
-- 按销售部门和销售人员姓名进行分组,并按照维度计算销售数量的总和
SELECT sales_department, salesperson, SUM(sales_quantity) AS total_sales
FROM sales_data
GROUP BY CUBE(sales_department, salesperson)
ORDER BY sales_department DESC, salesperson DESC ;

可以看出首先对sales_department、salesperson 进行分组汇总,然后对sales_department进行汇总,之后对salesperson分组汇总,最后一行为全表汇总。
Grouping Set 的使用
-- 按销售部门和销售人员姓名进行分组统计,不计算总和
SELECT sales_department, salesperson, SUM(sales_quantity) AS total_sales
FROM sales_data
GROUP BY GROUPING SETS( sales_department , salesperson )
ORDER BY sales_department DESC, salesperson DESC;

按照传入维度进行分组统计,但不计算维度总和
-- 按销售部门和销售人员姓名进行分组统计,计算总和
SELECT sales_department, salesperson, SUM(sales_quantity) AS total_sales
FROM sales_data
GROUP BY GROUPING SETS( sales_department , salesperson ,() )
ORDER BY sales_department DESC, salesperson DESC;

本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 枫月Blog
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果