我有一个如下所示的交易数据表:
User_ID Transaction_Type
1000 register
1000 browse
2000 browse
1000 buy
3000 register
我需要识别已执行两次不同交易的User_ID,例如注册并购买。我怎样才能在SQL中执行此操作?
答案 0 :(得分:0)
这是一种方法:
select user_id
from transactions t
where transaction_type in ('register', 'buy')
group by user_id
having count(distinct transaction_type) = 2;
答案 1 :(得分:0)
如果您允许使用过程语言通过GROUP BY查询将繁重的工作推送到RDBMS上,并在结果从数据库返回时对结果进行计数,则这是微不足道的。
如果你坚持坚持SQL,那么考虑一下。将{register,browse,buy,...}视为ENUM并将它们分配给不同的位值,例如: 0x01,0x02,0x04,....现在按位OR它们(等效地查找不同值的算术和)。创建一个将number_of_bits_set映射到序数的关系,例如0x06 => 2,并对该表进行JOIN以识别具有相关数量的不同事务的用户。