首页 > 试题广场 >

从 Products 表中检索所有的产品名称以及对应的销售总

[编程题]从 Products 表中检索所有的产品名称以及对应的销售总
  • 热度指数:93955 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
 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,返回结果无需排序。
示例1

输入

DROP TABLE IF EXISTS `Products`;
CREATE TABLE IF NOT EXISTS `Products` (
`prod_id` VARCHAR(255) NOT NULL COMMENT '产品 ID',
`prod_name` VARCHAR(255) NOT NULL COMMENT '产品名称'
);
INSERT INTO `Products` VALUES ('a0001','egg'),
('a0002','sockets'),
('a0013','coffee'),
('a0003','cola');

DROP TABLE IF EXISTS `OrderItems`;
CREATE TABLE IF NOT EXISTS `OrderItems`(
	prod_id VARCHAR(255) NOT NULL COMMENT '产品id',
	quantity INT(16) NOT NULL COMMENT '商品数量'
);
INSERT `OrderItems` VALUES ('a0001',105),('a0002',1100),('a0002',200),('a0013',1121),('a0003',10),('a0003',19),('a0003',5);

输出

egg|105.000
sockets|1300.000
coffee|1121.000
cola|34.000
SELECT
    prod_name,
    quant_sold
FROM
    (
        SELECT
            prod_name,
            SUM(quantity) AS quant_sold
        FROM
            OrderItems
            JOIN Products USING (prod_id)
        GROUP BY
            prod_name
    ) AS total

发表于 2024-11-19 16:41:11 回复(0)
select prod_name,quant_sold from Products a join (select prod_id,SUM(quantity) quant_sold from OrderItems group by prod_id) b on a.prod_id=b.prod_id;
发表于 2024-09-02 12:28:38 回复(0)
select
    prod_name,
    quant_sold
from
    (
        select
            prod_id,
            sum(quantity) as quant_sold
        from
            OrderItems
        group by
            prod_id
    ) oi
    inner join Products p using (prod_id);

发表于 2024-07-16 09:43:32 回复(0)
select
    prod_name,
    sum(quantity) as num
from
    Products
    left join OrderItems on Products.prod_id = OrderItems.prod_id
group by
    Products.prod_name

编辑于 2024-04-24 15:59:16 回复(0)

一、标量子查询:即题意要求在 OrderItems 表上使用子查询和 SUM(quantity)检索

select
    prod_name,
    (select sum(quantity) from OrderItems
    where OrderItems.prod_id = Products.prod_id) as quant_sold
from Products;
当返回结果是单一值,没有其他列时,例如此数返回只是sum(quantity),就可以通过标量子查询:聚合函数() + where table1.column = talbe2.column的形式实现了分组聚合的效果而没有显式的使用group by。标量子查询的运行效率可能不如 GROUP BY,因为数据库引擎需要执行嵌套查询,并为每个外部查询的行执行一个子查询。这可能导致更多的计算和资源消耗,可读性也不如group by清晰好理解。

二、使用group by 

select 
    p.prod_name,
    o.quant_sold
from Products as p
left join (
    select prod_id, sum(quantity) as quant_sold
    from OrderItems
    group by prod_id) as o
on p.prod_id = o.prod_id;
两个表一个表Products两列,一个使用group by 得到quant_sold的新表o,输出结果无非是两个表的联结
1. 显示连接:from p left join o on p.prod_id = o.prod_id
2. 隐式连接:from p, o where p.prod_id = o.prod_id 实现和inner join on 格式相同的效果

按照常见的SQL教程中,标量子查询用的不多,隐式连接也不多不常用,都在复杂查询时可读性差不容易理解。

编辑于 2023-12-19 17:51:38 回复(0)
select prod_name, sum(quantity) as quant_sold
from Products, OrderItems
where Products.prod_id=OrderItems.prod_id
group by prod_name


发表于 2023-10-19 17:13:22 回复(0)
SELECT prod_name,
    (SELECT SUM(quantity)
    FROM OrderItems oi
    WHERE oi.prod_id = p.prod_id
    GROUP BY oi.prod_id) AS quant_sold
FROM Products p

我的答案
发表于 2023-09-19 14:44:15 回复(0)
select
    prod_name,
    (
        select
            sum(quantity)
        from
            OrderItems
        where
            Products.prod_id = OrderItems.prod_id
    ) as quant_sold
from
    Products;

烦人捏

发表于 2023-08-16 15:04:47 回复(0)
# 方法一:
with t as(
    select
      prod_id,
      sum(quantity) as quant_sold
    from  OrderItems
    group by prod_id
)
select 
  prod_name,
  quant_sold 
from Products p left join t
on p.prod_id = t.prod_id;

# 方法二:
select
    prod_name,
    sum(quantity) as quant_sold
from Products a left join OrderItems b
on a.prod_id = b.prod_id
group by prod_name;

发表于 2023-08-09 12:06:48 回复(1)
SELECT p.prod_name,n.quant_sold FROM Products p
INNER JOIN
(SELECT SUM(quantity) quant_sold ,prod_id FROM OrderItems
GROUP BY prod_id) n
ON p.prod_id=n.prod_id;
SELECT p.prod_name,n.quant_sold FROM Products p
INNER JOIN 
(SELECT SUM(quantity) quant_sold ,prod_id FROM OrderItems
GROUP BY prod_id) n
ON p.prod_id=n.prod_id;

发表于 2023-06-06 11:24:40 回复(0)

select p.prod_name,sum(o.quantity) as quant_sold

from

Products p

left join

OrderItems o

on p.prod_id =o.prod_id

group by p.prod_name

select p.prod_name,
(select sum(quantity) from OrderItems o
where o.prod_id =p.prod_id
) as quant_sold
from Products p

发表于 2023-06-01 17:08:12 回复(0)
请教一下大家,这段代码为什么会报错“Subquery returns more than 1 row”呢?我sum了多条记录,不应该直接把这几条记录求和吗
SELECT
    prod_name,
    SUM(
        (
            SELECT quantity
            FROM OrderItems o
            WHERE o.prod_id = p.prod_id 
        )
    )
FROM 
    Products p
GROUP BY prod_name

发表于 2023-05-19 15:53:59 回复(1)
select
    prod_name,
    sum(k) quant_sold
from
    (
        select
            prod_id,
            sum(quantity) k
        from
            OrderItems
        group by
            prod_id
    ) n,
    Products
where
    n.prod_id = Products.prod_id
group by
    prod_name

发表于 2023-05-06 20:00:01 回复(0)
select
    prod_name,
    sum(quantity) quant_sold
from
    Products p,
    OrderItems o
where
    p.prod_id = o.prod_id
group by
    prod_name;
发表于 2023-04-12 16:53:57 回复(0)
select
    prod_name,
    quant_sold
from
    Products,
    (
        select
            prod_id,
            sum(quantity) as quant_sold
        from
            OrderItems
        group by
            prod_id
    ) as OrderItemsAfter
where
    Products.prod_id=OrderItemsAfter.prod_id
发表于 2023-03-14 16:45:26 回复(0)
select prod_name,quant_sold
from Products,(
    select prod_id,sum(quantity) as quant_sold
    from OrderItems
    group by prod_id
) as temp
where Products.prod_id=temp.prod_id

发表于 2023-03-01 17:48:06 回复(0)
select
    prod_name,
    sum(quantity) as quant_sold
from Products
join OrderItems
using(prod_id)
group by prod_id;

这种写法为什么错了
发表于 2023-02-17 21:19:30 回复(0)
SELECT A.prod_name,SUM(B.quantity) AS quant_sold
FROM Products AS A
INNER JOIN OrderItems AS B
ON A.prod_id=B.prod_id
GROUP BY B.prod_id


发表于 2023-01-25 21:06:47 回复(1)