SQL94 返回每个顾客不同订单的总金额

文章提供了一个SQL问题,要求编写查询语句从Orders和OrderItems表中获取每个顾客的订单总额,并按总额降序排列。解决方案涉及到子查询和SUM函数的使用,以计算每个顾客的总花费。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

描述

我们需要一个顾客 ID 列表,其中包含他们已订购的总金额。

OrderItems表代表订单信息,OrderItems表有订单号:order_num和商品售出价格:item_price、商品数量:quantity。

order_num

item_price

quantity

a0001

10

105

a0002

1

1100

a0002

1

200

a0013

2

1121

a0003

5

10

a0003

1

19

a0003

7

5

Orders表订单号:order_num、顾客id:cust_id

order_num

cust_id

a0001

cust10

a0002

cust1

a0003

cust1

a0013

cust2

【问题】

编写 SQL语句,返回顾客 ID(Orders 表中的 cust_id),并使用子查询返回total_ordered 以便返回每个顾客的订单总数,将结果按金额从大到小排序。

提示:你之前已经使用 SUM()计算订单总数。

【示例结果】返回顾客id cust_id和total_order下单总额

cust_id

total_ordered

cust2

2242

cust1

1300

cust10

1050

cust2

104

【示例解析】cust2在Orders里面的订单a0013,a0013的售出价格是2售出数量是1121,总额是2242,最后返回cust2的支付总额是2242。

示例1

输入:

DROP TABLE IF EXISTS `OrderItems`;

CREATE TABLE IF NOT EXISTS `OrderItems`(

order_num VARCHAR(255) NOT NULL COMMENT '商品订单号',

item_price INT(16) NOT NULL COMMENT '售出价格',

quantity INT(16) NOT NULL COMMENT '商品数量'

);

INSERT `OrderItems` VALUES ('a0001',10,105),('a0002',1,1100),('a0002',1,200),('a0013',2,1121),('a0003',5,10),('a0003',1,19),('a0003',7,5);

DROP TABLE IF EXISTS `Orders`;

CREATE TABLE IF NOT EXISTS `Orders`(

order_num VARCHAR(255) NOT NULL COMMENT '商品订单号',

cust_id VARCHAR(255) NOT NULL COMMENT '顾客id'

);

INSERT `Orders` VALUES ('a0001','cust10'),('a0003','cust1'),('a0013','cust2');

复制

输出:

cust2|2242.000

cust10|1050.000

cust1|104.000

答案

select cust_id,sum(item_price*quantity) as total_ordered
from Orders t1,OrderItems t2
where t1.order_num=t2.order_num
group by cust_id
order by sum(item_price*quantity)  desc
### SQL 查询 orders 表中的订单总数 要查询 `orders` 表中订单的总数量,可以使用聚合函数 `COUNT()` 来统计表中记录的数量。以下是实现此功能的标准 SQL 查询语句: ```sql SELECT COUNT(*) AS total_orders FROM Orders; ``` 上述查询会返回 `Orders` 表中所有订单的总数,并将其命名为 `total_orders`[^5]。 如果需要按特定条件过滤数据后再统计订单数量,则可以在 `WHERE` 子句中指定相应的筛选条件。例如,假设只希望统计某一年内的订单数量,可以这样写: ```sql SELECT COUNT(*) AS total_orders FROM Orders WHERE YEAR(order_date) = 2023; ``` 这里通过 `YEAR(order_date)` 提取年份并限定范围来计算符合条件的订单数[^6]。 #### 结合其他需求扩展查询 对于更复杂的场景,比如按照客户分组统计每位客户订单数量或者求解某个时间段内的订单总额等操作,可以根据实际业务逻辑调整查询结构。例如基于引用内容提到的需求之一——获取订单金额最高的几个客户及其消费详情时可采用如下方式构建多层嵌套子查询或联结多个关联表格完成分析任务[^7]: ```sql -- 统计每名顾客产生的订单总金额,并降序排列找出最高消费者们 WITH CustomerOrderTotals AS ( SELECT C.cust_name, SUM(OI.item_price * OI.quantity) AS TotalSpent FROM Customers C INNER JOIN Orders O ON C.cust_id = O.cust_id INNER JOIN OrderItems OI ON O.order_num = OI.order_num GROUP BY C.cust_name ) SELECT * FROM CustomerOrderTotals ORDER BY TotalSpent DESC LIMIT 10; -- 取前10位最大花费者作为例子展示 ``` 以上代码片段展示了如何利用窗口函数与连接技术深入挖掘隐藏于数据库深处的信息价值所在[^8]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值