SQL - 多表分组求和

描述

 Products 表中检索所有的产品名称:prod_name、产品id:prod_id
prod_id prod_name
a0001 egg
a0002 sockets
a0013 coffee
a0003 cola
OrderItems代表订单商品表,订单产品:prod_id、售出数量:quantity
prod_id quantity
a0001 105
a0002 1100
a0002 200
a0013 1121
a0003 10
a0003 19
a0003 5
【问题】
编写 SQL 语句,从 Products 表中检索所有的产品名称(prod_name),以及名为 quant_sold 的计算列,其中包含所售产品的总数(在 OrderItems 表上使用子查询和 SUM(quantity)检索)。
 
【示例结果】返回产品名称prod_name和产品售出数量总和
prod_name quant_sold
egg 105
sockets 1300
coffee 1121
cola 34
【示例解析】prod_name是cola的prod_id为a0003,quantity总量为34,返回结果无需排序。
 
 
 
我的答案:
Select
    prod_name,
    sum(quantity) as quant_sold
from
    (
        Products as p
        left join OrderItems as o on p.prod_id = o.prod_id
    )
group by
    prod_name;

 

ChatGPT的答案:

SELECT prod_name, 
       (SELECT SUM(quantity) 
        FROM OrderItems 
        WHERE OrderItems.prod_id = Products.prod_id) AS quant_sold
FROM Products;

 

我用了多表连接,ChatGPT用了子查询。

效率上讲,连接应该比子查询更高,但是也可以告诉ChatGPT要用连接的方式做这道题。

 

posted @ 2023-04-13 10:51  热爱工作的宁致桑  阅读(182)  评论(0编辑  收藏  举报