(SQL) Select SUM of (Column 1) * Min(Column2) where Column 1 and 2 share an ID

Posted

技术标签:

【中文标题】(SQL) Select SUM of (Column 1) * Min(Column2) where Column 1 and 2 share an ID【英文标题】:(SQL) Select SUM of (Column 1) * Min(Column2) Where Column 1 and 2 share an ID 【发布时间】:2021-12-30 16:33:50 【问题描述】:

我对 SQL 很陌生,所以这个查询一直让我头疼。作为参考,我有两张表(简化版):

CREATE TABLE PARTS_USED
(  
    Part INT NOT NULL,
    Product INT NOT NULL,
    Quantity INT
    PRIMARY KEY(Part, Product)
);

CREATE TABLE SUPPLY
(
    Vendor INT NOT NULL,
    Part INT NOT NULL,
    Price DECIMAL(8,2) NOT NULL,
    PRIMARY KEY(Vendor, Part),
);

ProductPart 都是唯一 ID。

我在这里要做的是获取每个产品的总“成本”((Quantity * (Minimum Part Price)) 的总和)。

到目前为止,我有这个查询:

CREATE VIEW PRODUCT_COST(ProductID, TotalCost)
AS 
    SELECT 
        PARTS_USED.Product, 
        SUM(PARTS_USED.Quantity * (SUPPLY.Price))
    FROM 
        PARTS_USED
    INNER JOIN 
        SUPPLY ON PARTS_USED.Part = SUPPLY.Part
    GROUP BY 
        PARTS_USED.Product;

但是,我得到MIN(SUPPLY.Price) 被证明是困难的;我希望能够将SELECT 行中的SUPPLY.Price 更改为MIN(SUPPLY.Price),但这不起作用。由于表格的设置方式,我对应该如何使用 JOIN 感到很迷茫。

【问题讨论】:

【参考方案1】:

因为乘法是可交换的,你也许可以只取数量之和与最低价格的乘积:

CREATE VIEW PRODUCT_COST(ProductID, TotalCost) AS
SELECT pu.Product, SUM(pu.Quantity) * MIN(s.Price) AS "Total Cost"
FROM PARTS_USED pu
INNER JOIN SUPPLY s ON s.Part = pu.Part
GROUP BY pu.Product;

【讨论】:

以上是关于(SQL) Select SUM of (Column 1) * Min(Column2) where Column 1 and 2 share an ID的主要内容,如果未能解决你的问题,请参考以下文章

vuepress build提示YAMLException: end of the stream or a document separator is expected at line 7, colu

SQL Server:带有内部 SELECT 和子 SELECT 的 SUM()。每次都出错

SQL 在 Select 中使用 SUM() 在视图上创建索引

SQL 语句 select sum(a) from table1 where b=3

SQL 错误 - Windows 函数只能出现在 SELECT 或 ORDER BY 子句中

这是什么SQL:SUM(OF A_C2_1-A_C2_24)