2011-03-09 33 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

相关问题