表 - 产品的产品数量如下
╔═══════════╦═════════════╗
║ PRODUCTID ║ PRODUCTNAME ║
╠═══════════╬═════════════╣
║ 1 ║ Nokia ║
║ 2 ║ Samsung ║
║ 3 ║ BlackBerry ║
╚═══════════╩═════════════╝
表 - SalesPersonProduct 具有以下记录
╔═══════════════╦═══════════╗
║ SALESPERSONID ║ PRODUCTID ║
╠═══════════════╬═══════════╣
║ S1 ║ 1 ║
║ S1 ║ 2 ║
║ S1 ║ 3 ║
║ S2 ║ 1 ║
║ S3 ║ 2 ║
╚═══════════════╩═══════════╝
编写一个返回已售产品总数的SQL查询?
答案 0 :(得分:2)
这应该是非常直截了当的。您首先需要加入两个表。下面的查询使用LEFT JOIN
,因为它包含左侧表中的所有记录Products
,即使它在右侧有匹配的记录或没有表格为SalesPersonProduct
。
记录加入后,您现在可以使用COUNT()
聚合函数来计算每个组的记录数。
由于查询使用LEFT JOIN
,因此表SalesPersonProduct
上没有匹配记录的所有记录在zero
列上的值都为TotalSold
。
SELECT a.ProductID,
a.ProductName,
COUNT(b.ProductID) TotalSold
FROM Products a
LEFT JOIN SalesPersonProduct b
ON a.ProductID = b.ProductID
GROUP BY a.ProductID,
a.ProductName
输出
╔═══════════╦═════════════╦═══════════╗
║ PRODUCTID ║ PRODUCTNAME ║ TOTALSOLD ║
╠═══════════╬═════════════╬═══════════╣
║ 1 ║ Nokia ║ 2 ║
║ 2 ║ Samsung ║ 2 ║
║ 3 ║ BlackBerry ║ 1 ║
╚═══════════╩═════════════╩═══════════╝
要进一步了解联接,请访问以下链接:
答案 1 :(得分:1)
如果您只想返回销售总数,那么您可以通过计算SalesPersonProduct
表中的行来轻松完成此操作:
select count(productid) TotalProducts
from SalesPersonProduct;
但是,如果您想要每个产品的总销售数量,那么您需要JOIN
列productId
上的表格:
select p.productname, count(s.productid) TotalSales
from products p
left join SalesPersonProduct s
on p.productid = s.productid
group by p.productname
在JOIN
版本中,我关闭了LEFT JOIN
,这将返回所有产品名称,即使没有销售。在您的示例数据中,如果您将Apple添加为产品名称,那么您将通过LEFT JOIN返回以下结果:
| PRODUCTNAME | TOTALSALES |
----------------------------
| Apple | 0 |
| BlackBerry | 1 |
| Nokia | 2 |
| Samsung | 2 |