2015-01-05 44 views
0

Postgresql:9.3 我有一个长购物车ID包含的“购物车ID”和“产品ID”的日志。 我正在寻找一种方法来创建具有最常见“产品ID”的组。 “产品ID”可以同时在多个组中。Posgresql:具有最常见项目的组:处理重叠项目

因此,我需要“购物车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项的购物者。我需要将它们分开。

+0

组的大小是多少? 2个产品?,n个产品? – Jayvee

+0

请编辑您的问题是样本数据和期望的结果。它似乎描述得很差。 –

回答

0

我敢打赌,您可能想循环使用CartId在购物表上加入的产品表。可能类似于

DECLARE ProdId Product%rowtype;

BEGIN FOR PRODID在选定的 “产品编号” 从的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';