首页 > 试题广场 >

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

[编程题]返回每个顾客不同订单的总金额
  • 热度指数:165619 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
我们需要一个顾客 ID 列表,其中包含他们已订购的总金额。
OrderItems表代表订单信息,OrderItems表有订单号:order_num和商品售出价格:item_price、商品数量:quantity

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

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

【示例解析】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');

输出

cust_id|total_ordered
cust2|2242
cust10|1050
cust1|104
头像 J青
发表于 2022-04-03 15:35:22
select cust_id, (select SUM(item_price*quantity) FROM OrderItems a WHERE a.order_num=b.order_num)total_ordered from Orders b ORDER BY total_ordered 展开全文
头像 阿莉勒丝黛拉
发表于 2022-03-07 22:01:02
SELECT      o.cust_id cust_id,     tb.total_ordered total_ordered FROM (     展开全文
头像 Hlyna
发表于 2022-10-27 16:29:21
整理了一下 子查询的方法,其中方法三、四很像,有点重复。 感觉题目给的示例是错误的,cust2不应该有两行,所以很多子查询(从OrderItems里)形成子表的时候group by order_num完了都应该是只有一个cust2的,有一个评论说如果想要两个cust2就需要在方法一里改成group 展开全文
头像 牛客871063558号
发表于 2022-07-14 16:07:35
作为计算字段使用子查询 可以按照以下步骤完成: (1)从OrderItems表中按订单号(order_num)分组,将每个订单的总金额进行统计 (2)对于订单Orders表以顾客id(cust_id)分组,将顾客对应的订单总金额进行统计 首先, SELECT s 展开全文
头像 牛客653386379号
发表于 2022-03-08 19:45:25
select cust_id,sum(item_price*quantity) total_ordered from OrderItems,Orders where OrderItems.order_num = Orders.order_num GROUP BY cust_id order by t 展开全文
头像 Sweety_Xt
发表于 2022-05-05 11:07:25
只能说:简单易懂 将查询第一个表的结果组合成第三个表 通过order_num联结第二个表和第三个表 select cust_id,total_ordered from Orders,( select order_num,sum(item_price*quantity) as total_ord 展开全文
头像 爱吃菜叶的猫
发表于 2022-03-06 15:50:29
根据实际情况,可以知道顾客和订单号是一对多的关系,那么,同一订单号应当是对应一位顾客ID,故可以先在OrderItems表中按订单号分组用SUM()函数计算出同一订单的总金额: SELECT order_num, SUM(item_price*quantity) AS total_ordered F 展开全文
头像 shenggong
发表于 2022-03-11 19:12:43
SELECT a.cust_id,b.total_ordered FROM Orders a INNER JOIN (SELECT order_num,SUM(item_price*quantity) AS total_ordered FROM OrderItems GROUP BY order_n 展开全文
头像 风飞飞飞
发表于 2022-03-04 21:50:46
分析 统计总金额。round(sum(item_price*quantity)) as total_orderd select中建立两表的联系。where t1.order_num=Orders.order_num 从表Oders中选出cust_id,total_ordered 代码 selec 展开全文
头像 rainbowzhou
发表于 2022-06-11 14:57:31
难点:total_ordered 的计算 根据题目,分析解题思路: 在OrderItems表,根据订单号,计算出已订购的总金额 在Orders表,根据订单号,得出是哪一个顾客 用order_num 列 将Orders表与OrderItems表关联 最后得出: select a.cust_id a 展开全文