2011-03-09 32 views
1

我想要計算產品對由客戶購買的次數。對於給定的交易,籃子中的每個產品都有唯一的transaction_id和數據庫中的一行。使用MySQL來計算行中有列A的值爲X且值爲Y的所有行

id product_id product_name transaction_id 
1 123   Eggs   8 
2 12   Milk   8 
3 124   Beer   8 
4 123   Eggs   9 
5 12   Milk   9 

我可以很容易地使用這樣的查詢來計算購買產品的交易數量。

SELECT 
COUNT(transaction_id), 
product_id, 
product_name 
FROM crm_purchases 
WHERE 
product_id = '123' 

這告訴我,有2人買了雞蛋。我想創建一個類似的查詢,通過統計product_id列中同時包含12和123的行時存在的所有transaction_id,計算包含雞蛋和牛奶的事務數量。

任何想法或指示我怎麼能實現這一目標?它讓我難倒了好幾個小時!

回答

0

你的意思是像SELECT COUNT(transaction_id)AS myCount然後myCount包含實際的計數?

+0

感謝您的快速響應,Fredrik。不,我不這麼認爲。我試圖做SELECT COUNT (TRANSACTION_ID), PRODUCT_ID相當於, PRODUCT_NAME FROM crm_purchases WHERE 的product_id = '123' 的product_id = '12'(這顯然是行不通的)。 – Matt 2011-03-09 14:42:30

0

這將返回每對一個行購買

SELECT COUNT(*), product_id, transaction_id 
FROM crm_purchases 
WHERE product_id IN ('123', '12') 
GROUP BY transaction_id 
HAVING COUNT(*) = 2 

HAVING子句是一種像A組凡值。

1

您需要將表加入自己,以便您有一個結果集,其中包含兩行的每個組合(對於給定的transaction_id),然後選擇所需的組合,例如

SELECT COUNT(*) 
FROM crm_purchases cp1 
JOIN crm_purchases cp2 USING (transaction_id) 
WHERE cp1.product_id = 123 
AND cp2.product_id = 12; 

我鼓勵你去嘗試,而不COUNTWHERE查詢(在一個小數據集!),這樣你可以看到它實際上做什麼。

+0

這就是門票!尼克,尼斯。非常感謝。 – Matt 2011-03-09 15:01:25

相關問題