我有一张名为' transactions'如
transactiondate(date) - customerid(varchar) - item(varchar)
2017-01-01 1 coffee
2017-01-01 2 tea
2017-01-01 2 choc muffin
2017-01-02 2 coffee
2017-01-02 1 tea
2017-01-02 1 choc muffin
2017-01-03 1 scone
2017-01-03 1 coffee
2017-01-03 1 choc muffin
2017-01-03 2 tea
我可以使大多数SQL查询工作,例如查找最常购买的项目(使用分组和计数),但具体是我试图在单个销售中找到最常见的项目组合,例如。一个人通过松饼和大茶一起做的多么常见。有效地,它意味着在同一个日期内由同一个客户对具有相同交易日期和两个或更多个行进行分组。这是Have子句进入的地方,还是可怕的汇总和多维数据集?
以上示例作为示例示出了同一客户在同一天用choc松饼购买茶。我有一个想法,就像在c#表单中使用复选框来选择产品的各种组合,并显示它们在同一事务中的包含频率。
更新:使用select transactiondate, customerid, count(1) as cnt from transactions group by transactiondate, customerid order by cnt desc
确实会显示多次购买的时间,但不显示实际的商品。
答案 0 :(得分:1)
这是非常直的,我认为以下很明显不需要维基?
SELECT transactiondate, customerid, count(distinct item)
FROM transactions
WHERE item in ('coffee', 'choc muffin')
GROUP BY 1,2
HAVING count(distinct item) > 1