PostgreSQL:包含最常见项目的组:处理重叠项目

时间:2015-01-05 17:14:55

标签: sql postgresql

Postgresql:9.3 我有一个很长的日志"购物车ID"以及"产品ID"每个购物车包含。 我正在寻找一种方法来创建拥有最多"产品ID"共同的。 "产品ID"可以同时在多个组中。

因此,我需要购物车ID""产品ID"和组的名称(组1,组2,......)。

如果有人提示如何做到这一点。我知道SQL查询并不理想,但它是我目前所拥有的。

编辑:通过以下查询,我知道xx购物车的群组共有xx个产品。

WITH a AS (
SELECT Shopping_Cart.Product_Id AS Product_Id, count(Shopping_Cart.Product_Id) AS "count" FROM Shopping_Cart 
GROUP BY Shopping_Cart.Product_Id
ORDER BY "count"
) 

SELECT a."count" AS "Product in Common", count(DISTINCT Shopping_Cart.id) AS "Shopping Cart Count" FROM a
RIGHT JOIN Shopping_Cart ON Shopping_Cart.Product_Id = a.Product_Id
GROUP BY  a."count"

它比没有好,但如果我有7个购物者,1,2,3和7个购物者的商品为4,5,6,则他们属于同一组购物者,共有3个商品。我需要将它们分开。

1 个答案:

答案 0 :(得分:0)

我打赌你可能希望通过CartId循环访问购物桌上的Product表。也许像是

DECLARE     ProdId Product%rowtype;

BEGIN     选择产品"产品ID"来自ProductTable

LOOP
    SELECT ProdId,ProductId,count(CartId) 
    From ShoppingTable where CartId in 
    (Select Distinct CartId from Shopping where ProductId = ProdId) 
    GROUP BY ProdId,ProductId
    ORDER by count(CartId) Desc

RETURN NEXt ProdId;

END LOOP;

RETURN;

END

LANGUAGE' plpgsql' ;