假设我有一个带有采购表的杂货店应用程序:
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;
我可以获得有关如何扩展现有查询以获得所需输出的指示吗?
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
Assumed:
杂货店= 销售记录
客户ID= 独特的销售
- 此查询获取所有grocery_store记录,并且对于每笔销售交易,它以特定顺序(a.itemid)创建所有可能的组合(a.itemid,b.itemid)
- 这种特定的顺序消除了重复项 (apple, Orange) 被保留,而 (orange, apple) 则不是必需的。
- 从所有销售中生成所有组合后,使用简单的分组依据和按计数排序来在顶部显示最受欢迎的组合
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)