2015-01-05 72 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';