【问题标题】:Need help in writing SQL query在编写 SQL 查询时需要帮助
【发布时间】:2013-03-29 11:59:09
【问题描述】:

表格 - 产品的产品数量如下

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

表 - SalesPersonProduct 有以下记录

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

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

【问题讨论】:

  • 很棒的桌面展示!你是怎么做到的?

标签: sql select join


【解决方案1】:

这应该很简单。您需要首先加入两个表。下面的查询使用LEFT JOIN,因为它包含了 lefthand side 表中的所有记录,即 Products,即使它在 righthand side 中有匹配记录或没有匹配记录表是SalesPersonProduct

加入记录后,您现在可以使用COUNT(),这是一个聚合函数来计算每个组的记录数。

由于查询使用LEFT JOIN,所有在表SalesPersonProduct 上没有匹配记录的记录将在TotalSold 列上具有zero 的值。

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 ║
╚═══════════╩═════════════╩═══════════╝

如需进一步了解联接,请访问以下链接:

【讨论】:

    【解决方案2】:

    如果您只想返回销售额的总数,那么您可以通过计算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 |
    

    【讨论】:

      猜你喜欢
      • 2011-03-14
      • 2019-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多