SQL Query查找具有第二列的所有值的值

时间:2017-09-22 00:46:43

标签: sql

我有一个如下所示的交易数据表:

User_ID     Transaction_Type

1000        register
1000        browse
2000        browse
1000        buy
3000        register

我需要识别已执行两次不同交易的User_ID,例如注册并购买。我怎样才能在SQL中执行此操作?

2 个答案:

答案 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以识别具有相关数量的不同事务的用户。