0

我有一个查询,我想稍微调整一下以显示不同的信息。目前,我的查询获取所有订单,其中产品按转化次数最多的产品排在首位。这是查询:

   SELECT nopv.ProductVariantID, COUNT(nopv.ProductVariantID), p.ProductId, c.CategoryID, c.Name FROM Nop_OrderProductVariant nopv
INNER JOIN Nop_ProductVariant npv
ON nopv.ProductVariantID = npv.ProductVariantId
INNER JOIN Nop_Product p
ON npv.ProductID = p.ProductId
INNER JOIN Nop_Product_Category_Mapping npcm
ON p.ProductId = npcm.ProductID
INNER JOIN Nop_Category c 
ON npcm.CategoryID = c.CategoryID
GROUP BY nopv.ProductVariantID, p.ProductId, c.CategoryID, c.Name
HAVING COUNT(*) > 0
ORDER BY COUNT(nopv.ProductVariantID) DESC

结果是:

在此处输入图像描述

我希望每个类别只能有一次,例如“程序员和模块”类别应该只有一个记录,包含该类别中所有 productvariantID 的总和。第一个字段也可以避免,因为如果有多个产品变量,查询将只需要显示一个。我真正需要的是每个类别的计数和 categoryID。提前致谢, Laziale

4

2 回答 2

2

只需从 select 和 Group By 中删除 Variant 和 ProductID。

   SELECT
     COUNT(nopv.ProductVariantID) ,
     c.CategoryID ,
     c.Name
   FROM
     Nop_OrderProductVariant nopv
   INNER JOIN Nop_ProductVariant npv
   ON
     nopv.ProductVariantID = npv.ProductVariantId
   INNER JOIN Nop_Product p
   ON
     npv.ProductID = p.ProductId
   INNER JOIN Nop_Product_Category_Mapping npcm
   ON
     p.ProductId = npcm.ProductID
   INNER JOIN Nop_Category c
   ON
     npcm.CategoryID = c.CategoryID
   GROUP BY
     c.CategoryID ,
     c.Name
   HAVING
     COUNT(*) > 0
   ORDER BY
     COUNT(nopv.ProductVariantID) DESC
于 2012-02-23T17:51:45.523 回答
1

我认为问题是你的group by

GROUP BY nopv.ProductVariantID, p.ProductId, c.CategoryID, c.Name

尝试:

GROUP BY c.CategoryID, c.Name -- c.Name is here since you probably can't select it otherwise

然后对你的做任何你需要的改变,SELECT这样它就可以工作了。

所以是这样的:

SELECT COUNT(nopv.ProductVariantID), c.CategoryID, c.Name
FROM Nop_OrderProductVariant nopv
INNER JOIN Nop_ProductVariant npv
ON nopv.ProductVariantID = npv.ProductVariantId
INNER JOIN Nop_Product p
ON npv.ProductID = p.ProductId
INNER JOIN Nop_Product_Category_Mapping npcm
ON p.ProductId = npcm.ProductID
INNER JOIN Nop_Category c 
ON npcm.CategoryID = c.CategoryID
GROUP BY c.CategoryID, c.Name
HAVING COUNT(*) > 0
ORDER BY COUNT(nopv.ProductVariantID) DESC
于 2012-02-23T17:49:35.460 回答