在编写SQL查询时需要帮助

时间:2013-03-29 11:59:10

标签: sql select join

表 - 产品的产品数量如下

╔═══════════╦═════════════╗
║ PRODUCTID ║ PRODUCTNAME ║
╠═══════════╬═════════════╣
║         1 ║ Nokia       ║
║         2 ║ Samsung     ║
║         3 ║ BlackBerry  ║
╚═══════════╩═════════════╝

表 - SalesPersonProduct 具有以下记录

╔═══════════════╦═══════════╗
║ SALESPERSONID ║ PRODUCTID ║
╠═══════════════╬═══════════╣
║ S1            ║         1 ║
║ S1            ║         2 ║
║ S1            ║         3 ║
║ S2            ║         1 ║
║ S3            ║         2 ║
╚═══════════════╩═══════════╝

编写一个返回已售产品总数的SQL查询?

2 个答案:

答案 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;

但是,如果您想要每个产品的总销售数量,那么您需要JOINproductId上的表格:

select p.productname, count(s.productid) TotalSales
from products p
left join SalesPersonProduct s
  on p.productid = s.productid
group by p.productname

请参阅SQL Fiddle with Demo

JOIN版本中,我关闭了LEFT JOIN,这将返回所有产品名称,即使没有销售。在您的示例数据中,如果您将Apple添加为产品名称,那么您将通过LEFT JOIN返回以下结果:

| PRODUCTNAME | TOTALSALES |
----------------------------
|       Apple |          0 |
|  BlackBerry |          1 |
|       Nokia |          2 |
|     Samsung |          2 |