【问题标题】:(SQL) Struggling with using sum(SQL) 使用 sum 苦苦挣扎
【发布时间】:2014-01-26 16:01:54
【问题描述】:

我正在学习 SQL,并在一些语法上苦苦挣扎。因此,下面的 SQL 代码应该显示供应商列表及其所有产品的总价。它工作正常,直到我尝试包含我只希望它显示总和小于 100 的行的额外条件。

SELECT Suppliers.SupplierName, SUM(Products.Price)
FROM Suppliers, Products
WHERE Suppliers.SupplierID = Products.SupplierID
AND Products.Price < 100
GROUP BY Suppliers.SupplierName;

正如目前的代码一样,它只是从最终总数中省略了大于 100 的单个值。将代码更改为

AND SUM(Products.Price) < 100

也没有用。而且我不确定我应该如何让它按照我想要的方式工作。

另外,使用 Oracle。

【问题讨论】:

    标签: sql oracle select sum


    【解决方案1】:

    如果你正在学习 SQL,你应该学习使用显式的join 语法。我认为您正在寻找having 子句;这就是合计金额的条件:

    SELECT s.SupplierName, SUM(p.Price)
    FROM Suppliers s join
         Products p
         on s.SupplierID = p.SupplierID
    GROUP BY s.SupplierName
    HAVING SUM(p.Price) < 100;
    

    我还在您的查询中添加了表别名(sp)。这些通常使查询更易于阅读,并且它们是自联接所必需的。

    【讨论】:

      【解决方案2】:

      试试这个:

      SELECT Suppliers.SupplierName, SUM(Products.Price) totalPrice
      FROM Suppliers, Products
      WHERE Suppliers.SupplierID = Products.SupplierID
      GROUP BY Suppliers.SupplierName
      HAVING totalPrice < 100;
      

      【讨论】:

      • 不能在having子句中使用列别名;它只能在order by 中使用,除非您使用子查询。
      【解决方案3】:

      使用

      WHERE Suppliers.SupplierID = Products.SupplierID
      GROUP BY Suppliers.SupplierName
      HAVING SUM(Products.Price) < 100;
      

      【讨论】:

        猜你喜欢
        • 2020-08-06
        • 1970-01-01
        • 1970-01-01
        • 2018-07-20
        • 2015-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多