GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组

本文通过创建并填充一个订单表,展示了如何使用SQL的GROUP BY与SUM函数来计算不同客户的总消费金额。

1
drop table orders; 2 create table orders ( 3 o_id int auto_increment primary key, 4 orderdate date, 5 orderprice int, 6 customer varchar(100) 7 ); 8 9 insert into orders(orderdate, orderprice, customer) values('2008-12-29', 1000, 'Bush'); 10 insert into orders(orderdate, orderprice, customer) values('2008-11-23', 1600, 'Carter'); 11 insert into orders(orderdate, orderprice, customer) values('2008-10-05', 700, 'Bush'); 12 insert into orders(orderdate, orderprice, customer) values('2008-09-28', 300, 'Bush'); 13 insert into orders(orderdate, orderprice, customer) values('2008-08-06', 2000, 'Adams'); 14 insert into orders(orderdate, orderprice, customer) values('2008-07-21', 100, 'Carter'); 15 16 select * from orders; 17 18 SELECT customer,SUM(orderprice) FROM orders 19 GROUP BY customer;

我们拥有下面这个 "Orders" 表:

O_IdOrderDateOrderPriceCustomer
12008/12/291000Bush
22008/11/231600Carter
32008/10/05700Bush
42008/09/28300Bush
52008/08/062000Adams
62008/07/21100Carter

 

我们使用下列 SQL 语句:

SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer

结果集类似这样:

CustomerSUM(OrderPrice)
Bush2000
Carter1700
Adams2000

转载于:https://www.cnblogs.com/wanghui390/p/4042592.html

### 合并三个SQL查询结果合计方法 在SQL中,可以通过`UNION ALL`和`GROUP BY`结合使用来实现对多个查询结果的合并与合计。以下是具体实现方式: #### 1. 使用 `UNION ALL` 合并三个查询结果 `UNION ALL` 是一种 SQL 操作符,用于将两个多个 SELECT 语句结果合并成一个结果,并保留重复的行[^3]。通过这种方式,可以将三个查询的结果合并为一个结果。 ```sql SELECT column1, column2, column3 FROM table1 UNION ALL SELECT column1, column2, column3 FROM table2 UNION ALL SELECT column1, column2, column3 FROM table3; ``` #### 2. 对合并后的结果进行合计 为了对合并后的结果进行合计,可以在 `UNION ALL` 的基础上添加一个 `GROUP BY` 和 `WITH ROLLUP` 子句。`WITH ROLLUP` 可以生成汇总行[^2]。 以下是一个完整的示例,展示如何将三个查询结果合并并计算合计值: ```sql SELECT CASE WHEN GROUPING(column1) = 1 THEN '合计' ELSE column1 END AS column1, SUM(value1) AS total_value1, SUM(value2) AS total_value2, SUM(value3) AS total_value3 FROM ( SELECT column1, value1, value2, value3 FROM table1 UNION ALL SELECT column1, value1, value2, value3 FROM table2 UNION ALL SELECT column1, value1, value2, value3 FROM table3 ) AS combined_results GROUP BY column1 WITH ROLLUP; ``` 在此查询中: - `CASE WHEN GROUPING(column1) = 1 THEN '合计' ELSE column1 END` 用于标识汇总行。 - `SUM()` 函数用于计算每合计值。 - `WITH ROLLUP` 自动生成汇总行。 #### 3. 示例:按部门统计并加合计行 假设需要按部门统计三个表中的数据,并在最后加上合计行,可以参考以下代码: ```sql SELECT CASE WHEN GROUPING(dept_id) = 1 THEN '合计' ELSE dept_id END AS dept_id, SUM(salary) AS total_salary, SUM(bonus) AS total_bonus FROM ( SELECT dept_id, salary, bonus FROM employees_table1 UNION ALL SELECT dept_id, salary, bonus FROM employees_table2 UNION ALL SELECT dept_id, salary, bonus FROM employees_table3 ) AS combined_data GROUP BY dept_id WITH ROLLUP; ``` 此代码将三个表的数据合并,并按部门统计工资和奖金的总和,同时在最后添加一行“合计”[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值