SQL查询最流行的组合

时间:2011-02-15 17:57:58

标签: sql

假设我的杂货店应用程序带有购买表:

customerId int
itemId int

四位顾客进入商店:

Bob buys a banana, lemonade, and a cookie 
Kevin buys a banana, lemonade, and a donut
Sam buys a banana, orange juice, and a cupcake 
Susie buys a banana

我正在尝试编写一个查询,该查询将返回哪些项目组合最受欢迎。在这种情况下,此查询的结果应为:

banana and lemonade-2

我已经写了一个查询,告诉我一个多项目购买的所有项目的列表(我们不包括一个项目的销售 - 它不能形成“组合”)。它返回:

banana - 3
lemonade - 2
cookie - 1
donut - 1
cupcake - 1
orange juice - 1

以下是查询:

SELECT itemId, count( * ) 
FROM grocery_store
INNER JOIN (
SELECT customerId
FROM grocery_store
GROUP BY customerId
HAVING count( itemId ) > 1
)subQuery ON subQuery.customerId = grocery_store.customerId
GROUP BY itemId;

我是否可以获得有关如何扩展现有查询以获得所需输出的指针?

1 个答案:

答案 0 :(得分:6)

select a.itemID, b.itemID, COUNT(*) countForCombination
from grocery_store a
inner join grocery_store b
on a.customer_id = b.customer_id
and a.itemID < b.itemID
group by a.itemID, b.itemID
order by countForCombination desc

假设:

grocery_store =销售记录
customer_id =独特销售

  • 此查询获取所有grocery_store记录,并且对于每个单个销售事务,它以特定顺序创建所有可能的组合(a.itemid,b.itemid)(a.itemid)
  • 此特定订单可以保留重复项(苹果,橙色),而不需要(橙色,苹果)。
  • 在生成所有销售的所有组合后,使用简单的分组和按数量排序来显示顶部最受欢迎的组合