SQL97-返回顾客名称和相关订单号以及每个订单的总价

问题: SQL97 返回顾客名称和相关订单号以及每个订单的总价

Customers 表有字段,顾客名称:cust_name、顾客id:cust_id

cust_idcust_name
cust10andy
cust1ben
cust2tony
cust22tom
cust221an
cust2217hex

Orders订单信息表,含有字段,订单号:order_num、顾客id:cust_id

order_numcust_id
a1cust10
a2cust1
a3cust2
a4cust22
a5cust221
a7cust2217

OrderItems表有字段,商品订单号:order_num、商品数量:quantity、商品价格:item_price

order_numquantityitem_price
a1100010
a220010
a31015
a42550
a51525
a777

【问题】

除了返回顾客名称和订单号,返回 Customers 表中的顾客名称(cust_name)和Orders 表中的相关订单号(order_num),添加第三列 OrderTotal,其中包含每个订单的总价,并按顾客名称再按订单号对结果进行升序排序。

【示例结果】返回顾客名称 cust_name、订单号order_num、订单总额OrderTotal

cust_nameorder_numOrderTotal
ana5375
andya110000
bena22000
hexa749
toma41250
tonya3150

【示例解析】

例如顾客名称cust_name为an的顾客的订单a5的订单总额为quantity*item_price = 15 * 25 = 375,最后以cust_name和order_num来进行升序排序。

解答

思路

根据题目要求,我们需要输出:顾客名称、订单号、每个订单的总价(OrderTotal)。根据这个输出,可以初步确定,我们需要三张表的联合查询。

首先让两张表之间相互关联。

  1. 先考虑顾客信息表:Customers 、订单信息表:Orders 通过两张表的字段,我们可以通过字段cust_id将两张表关联起来,得到顾客名称

  2. 订单信息表:Orders以及商品信息表OrderItems。 我们可以通过字段order_num关联起来,算出每个订单的总价。

SQL

  1. 计算每个订单的总价
select 
    order_num,
    sum(quantity*item_price) OrderTotal 
from 
    OrderItems 
group by 
    order_num;
  1. 查出每个订单对应的用户id(cust_id)以及订单号(order_num)
select 
    o.cust_id,
    t.order_num,
    t.OrderTotal 
from 
    Orders o
join 
(select 
    order_num,
    sum(quantity*item_price) OrderTotal 
from 
    OrderItems 
group by 
    order_num) t
on 
    t.order_num = o.order_num;


  1. 连接Customers, 然后利用cust_id,将cust_id替换成cust_name
select 
    c.cust_name, 
    t.order_num, 
    t.OrderTotal
from
    Orders o
    inner join (
        select
            order_num,
            sum(quantity * item_price) OrderTotal
        from 
            OrderItems
        group by 
            order_num
    ) t
    on 
        o.order_num = t.order_num
    inner join 
        Customers c
    on 
        c.cust_id = o.cust_id
    order by
        c.cust_name, t.order_num;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值