3

表 -製品には以下の製品数があります

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

表 - SalesPersonProductには以下のレコードがあります

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

販売された製品の総数を返す SQL クエリを作成しますか?

4

2 に答える 2

2

これはかなり簡単なはずです。最初に両方のテーブルを結合する必要があります。以下のクエリは、一致するレコードがある場合でも左側のテーブルLEFT JOINにすべてのレコードが含まれているか、右側のテーブルに がない場合でも含まれているため、 を使用します。ProductsSalesPersonProduct

レコードが結合された後、集計関数COUNT()である which を使用して、各グループのレコード数をカウントできるようになりました。

クエリが を使用しLEFT JOINているため、 table に一致するレコードがないすべてのレコードの列SalesPersonProductの値はになります。zeroTotalSold

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

結合についてさらに詳しく知りたい場合は、以下のリンクにアクセスしてください。

于 2013-03-29T12:01:19.110 に答える
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

SQL Fiddle with Demoを参照してください。

JOINバージョンでは、売上がなくてもすべての製品名を返す a を閉じますLEFT JOIN。サンプル データで、Apple を製品名として追加した場合、LEFT JOIN を使用して次の結果が返されます。

| PRODUCTNAME | TOTALSALES |
----------------------------
|       Apple |          0 |
|  BlackBerry |          1 |
|       Nokia |          2 |
|     Samsung |          2 |
于 2013-03-29T12:03:54.050 に答える