【问题标题】:Something like forEach in SQL?SQL中的forEach之类的东西?
【发布时间】:2020-11-16 00:49:10
【问题描述】:

所以我需要查询每件商品已售出多少次,我有两个类似这样的表

Products
+-----------+-------+-----------+
| productID | price | inventory |
+-----------+-------+-----------+
| 31f9d     | 21    | 109       |
| M21xZ     | 80    | 87        |
| 56JmZ     | 35    | 48        |
+-----------+-------+-----------+

orderDetails
+---------+-------+----------+
| orderId | item  | Quantity |
+---------+-------+----------+
| 1       | 31f9d | 2        |
| 2       | 31f9d | 5        |
| 2       | 56JmZ | 3        |
+---------+-------+----------+

提前致谢!

【问题讨论】:

  • 这是一个非常基本的聚合查询SQL。您尝试了哪些不起作用的方法?
  • 在编程语言中,您告诉计算机如何做事,例如使用 ForEach 循环数据。 SQL 不是编程语言,而是第四代查询语言。你只是告诉计算机该做什么而不是如何去做。您不会说“循环我的数据”,而是“给我产品及其订单金额”。由 DBMS 决定如何实现这一点。

标签: mysql sql count sum db2


【解决方案1】:

如果你只想要每个产品的销售数量,你可以聚合明细表:

select item, count(*) as cnt_sales, sum(quantity) as sum_quantity
from orderdetails
group by item

如果你也想了解每个产品的详细信息,那么你可以加入。

select p.*, d.cnt_sales, d.sum_quantity
from products p
left join (
    select item, count(*) as cnt_sales, sum(quantity) as sum_quantity
    from orderdetails
    group by item
) d on d.item = p.productid

left join 允许产品无任何销售;它将在结果集中的cnt_salessum_quantity 列中带来null 值。

【讨论】:

  • 谢谢!使用了另一个答案,但也从这个答案中学到了很多!
【解决方案2】:

将两个表连接在一起,然后简单地按 itemId 分组:

select p.productID, sum(o.Quantity) from Products p 
    left join orderDetails o on p.productID = o.item 
group by p.productID

【讨论】:

  • 顺便说一句,您正在加入 tablesdatabase 是包含所有表的整体。
  • 不是母语者呵呵,已修复:)
  • 谢谢!这正是我一直在寻找的,学到了很多,再次感谢!
猜你喜欢
  • 2019-07-08
  • 2012-05-19
  • 2017-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多