0

我有以下表格:

   VENDOR:          PRODUCT:           ITEM:             STORE:
-  VENDOR_ID     -  PRODUCT_ID      -  ITEM_ID        -  STORE_ID
-  VENDOR_NAME   -  PRODUCT_DESC    -  STORE_ID       -  STORE_NAME
                 -  VENDOR_ID       -  PRODUCT_ID     -  STORE_LOCATION
                                    -  ITEM_PRICE

VENDOR 表存储有关产品供应商的信息,PRODUCT 表存储有关产品的信息,ITEM 表本质上是商店的库存,其中记录了每个库存商品。如果物品库存中有多个相同的产品,它有不同的ITEM_ID,但ITEM_ID和PRODUCT_ID是主键。STORE 存储商店信息:D

我想列出向产品种类最多的商店提供产品的供应商的名称。所以,我想我需要使用 COUNT 函数来计算每个 STORE 的 ITEM 记录中不同 PRODUCT_ID 的数量。

我真的不知道如何开始,我会很感激一些帮助。

这是我到目前为止所拥有的:

SELECT DISTINCT VENDOR.VENDOR_NAME AS [Vendor Name]
FROM VENDOR, PRODUCT, ITEM, STORE
WHERE STORE.STORE_ID 
IN (SELECT STORE_ID 
FROM ITEM);

这将返回所有供应商,但我需要在其中添加一个 COUNT 或 MAX 函数,但我不确定如何去做。任何帮助将不胜感激。

4

3 回答 3

0
SELECT V.VENDOR_NAME, COUNT(I.PRODUCT_ID)
FROM ((VENDOR AS V 
INNER JOIN PRODUCT AS P ON V.VENDOR_ID = P.VENDOR_ID) 
INNER JOIN ITEM AS I ON P.PRODUCT_ID = I.PRODUCT_ID) 
INNER JOIN STORE AS S ON I.STORE_ID = S.STORE_ID 
WHERE S.STORE_NAME = 'Store Name"
GROUP BY V.VENDOR_NAME
ORDER BY COUNT(I.PRODUCT_ID) DESC

上面的查询将获取供应商的名称和产品 ID 的计数。我将 WHERE 子句放在那里,以便您可以指定某个商店。如果您想要所有商店,请删除 WHERE。

于 2013-10-21T13:56:39.547 回答
0
SELECT Z.VENDOR_NAME AS VENDOR_NAME
FROM
(
    SELECT B.PRODUCT_ID,A.STORE_ID 
    FROM
    (
      SELECT A.STORE_ID,MAX(COUNT_PRODUCTS_PER_EACH_STORE) AS MAX_COUNT_PRODUCTS_PER_EACH_STORE
      FROM
      (
       SELECT STORE_ID,COUNT(DISTINCT PRODUCT_ID) AS COUNT_PRODUCTS_PER_EACH_STORE
       FROM ITEM
       GROUP BY STORE_ID
      ) A
    ) A,
    ITEM B
    WHERE A.STORE_ID = B.STORE_ID
) X,
PRODUCT Y,
VENDOR Z
WHERE X.PRODUCT_ID = Y.PRODUCT_ID
  AND Y.VENDOR_ID = Z.VENDOR_ID;
于 2013-10-21T14:14:18.777 回答
0

要分解它,您首先要获得“产品种类最多的商店”,因为访问不允许COUNT(DISTINCT您在计数之前使用子查询来获取不同的记录:

SELECT  TOP 1 
        Store_ID,
        COUNT(Product_ID) AS StoreProducts
FROM    (   SELECT  DISTINCT Store_ID, Product_ID
            FROM    Item
        ) i
GROUP BY Store_ID
ORDER BY COUNT(Product_ID) DESC; 

这将返回具有最多不同产品的商店的 store_ID。

然后,您需要获取向任何给定商店提供产品的所有 vendor_ID(以及提供的产品数量(如果需要))

SELECT  Item.Store_ID, 
        Vendor.Vendor_ID, 
        Vendor.Vendor_Name, 
        COUNT(Product.Product_ID) AS ItemsSuppliedToStore
FROM    (Item
        INNER JOIN Product
            ON item.Product_ID = Product.Product_ID)
        INNER JOIN Vendor
            ON Vendor.Vendor_ID = Product.Vendor_ID
GROUP BY Item.Store_ID, Vendor.Vendor_ID, Vendor.Vendor_Name;

这将按 store_ID 和他们在该商店的商品数量为您提供所有供应商

然后你可以结合你的两个查询:

SELECT  Store.Store_ID, 
        Store.Store_Name,
        TopStore.StoreProducts,
        Vendor.Vendor_ID, 
        Vendor.Vendor_Name, 
        COUNT(Product.Product_ID) AS ItemsSuppliedToStore
FROM    ((((SELECT  TOP 1 
                    Store_ID, 
                    COUNT(Product_ID) AS StoreProducts
            FROM    (   SELECT  DISTINCT Store_ID, Product_ID
                        FROM    Item
                    ) i
            GROUP BY Store_ID
            ORDER BY COUNT(Product_ID) DESC
        ) AS TopStore
        INNER JOIN Store
            ON Store.Store_ID = TopStore.Store_ID)
        INNER JOIN Item
            ON Item.Store_ID = TopStore.Store_ID)
        INNER JOIN Product
            ON item.Product_ID = Product.Product_ID)
        INNER JOIN Vendor
            ON Vendor.Vendor_ID = Product.Vendor_ID
GROUP BY Store.Store_ID, Store.Store_Name, TopStore.StoreProducts, 
         Vendor.Vendor_ID, Vendor.Vendor_Name;
于 2013-10-21T14:53:39.333 回答