我正在尝试查找存在两个类别的交易计数。
我有3个类别:椅子,桌子,杯子
使用CROSS JOIN成为9种组合(忽略欺骗和顺序):
Item_1 Item_2
Table Table
Table Chair
Table Cup
Chair Chair
Chair Table
Chair Cup
Cup Cup
Cup Chair
Cup Table
接下来是行级别的交易ID和类别表:
Trans_id Type
123 Table
123 Cup
234 Chair
345 Cup
345 Table
我正试图找到一个这样的表格,显示两个类别和两个类别的不同交易的数量:
Item_1 Item_2 Count
Table Table 578
Table Chair 826
Table Cup 370
Chair Chair 235
Chair Table 736
Chair Cup 662
Cup Cup 306
Cup Chair 262
Cup Table 839
我以为我可以做类似的事情:
select item1, item2, count(distinct(trans_id))
from t1
join t2
on t1.item1 IN (SELECT type FROM t2 group by trans_id)
and t1.item2 IN (SELECT type FROM t2 group by trans_id)
但没有运气 - 有什么建议吗?
答案 0 :(得分:2)
您需要为item1两次加入事务表,为item2加入一次。此后group by
将为您提供计数。
select t2.item1, t2.item2, count(distinct t11.trans_id)
from t2
join t1 t11 on t2.item1 = t11.type
join t1 t12 on t2.item2 = t12.type
where t11.trans_id=t12.trans_id
group by t2.item1, t2.item2
此查询中的 t1
是交易表,t2
是包含项目组合的表。
此查询生成对称对,如(table,chair),(chair,table),每个事务ID将对每个组合计数两次。我不确定你是否需要那个。需要更多澄清。