2012-02-23 163 views
0

我有一个查询,我想稍微调整一下以显示不同的信息。 目前我的查询获得的产品排名最高的转换次数最多的订单。 下面是该查询:按名称排序sql查询

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 

我有什么,结果是:

enter image description here

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

+0

查询不符合结果集。那是什么(没有列名)? – StingyJack 2012-02-23 17:42:41

+0

@StingyJack查询已更新,对不起 – Laziale 2012-02-23 17:46:08

+1

您的问题的主题与内容不符。你需要改变顺序吗? – 2012-02-23 17:52:25

回答

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 
+0

感谢您的回答,您和@JamieF的答案都是正确的,但您的速度更快。 – Laziale 2012-02-23 18:17:33

2

只需从双方选择和集团通过去除变异和产品ID。

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