【问题标题】:SQL - Adding values from same column of different IDsSQL - 从不同 ID 的同一列添加值
【发布时间】:2021-03-16 21:20:12
【问题描述】:

我有 2 个表产品和库存,如下所示。

产品:

Product_ID     Product_Description    Price
100            Computer               30
200            Laptop                 50
300            Printer                10

库存:

Product_ID   Stock
100          40
200          15
300          50

从这两个表中,我需要一个查询来列出具有最大库存数量的产品 ID、产品描述和数量,并将笔记本电脑的库存添加到显示中。

预期输出:

Product_ID   Product_Description   Stock
300          Printer               65

65 是打印机 50 和笔记本电脑 15 的结果。

能否请您尽快帮忙查询一下?

【问题讨论】:

  • Laptop 存货数量最大怎么办?你想让它翻倍吗?
  • 是的。就是这个想法

标签: sql sqlite subquery


【解决方案1】:

你可以用MAX()聚合函数来做到这一点:

SELECT p.Product_ID, p.Product_Description, 
       MAX(CASE WHEN p.Product_Description = 'Laptop' THEN i.Stock END) + 
       MAX(i.Stock) Stock
FROM Product p INNER JOIN Inventory i
ON i.Product_ID = p.Product_ID 

此代码依赖于 SQLite 的功能来返回包含最大值(在本例中为最后定义的最大值)的行。

请参阅demo
结果:

Product_ID Product_Description Stock
300 Printer 65

【讨论】:

    【解决方案2】:

    您可以使用窗口函数。这使用了一种技巧将数据缩减为两行,使用窗口函数将库存相加,然后仅选择一行作为非笔记本电脑行(如果有的话)。

    select p.*, sum(stock) over ()
    from (select s.*, row_number() over (order by stock desc) as seqnum
          from stock s
         ) s join
         product p
         on p.product_id = s.product_id
    where s.seqnum = 1 or p.product_description = 'Laptop'
    order by s.seqnum
    limit 1;
    

    【讨论】:

      猜你喜欢
      • 2013-04-22
      • 2017-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-07
      • 1970-01-01
      • 1970-01-01
      • 2021-12-27
      相关资源
      最近更新 更多