我正在学习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。
答案 0 :(得分:4)
如果您正在学习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;
我还在查询中添加了表别名(s
和p
)。这些通常使查询更容易阅读,并且自连接需要它们。
答案 1 :(得分:0)
试试这个:
SELECT Suppliers.SupplierName, SUM(Products.Price) totalPrice
FROM Suppliers, Products
WHERE Suppliers.SupplierID = Products.SupplierID
GROUP BY Suppliers.SupplierName
HAVING totalPrice < 100;
答案 2 :(得分:0)
使用
WHERE Suppliers.SupplierID = Products.SupplierID
GROUP BY Suppliers.SupplierName
HAVING SUM(Products.Price) < 100;