我正在尝试找出哪些ID仅具有一种交易类型。
我尝试加入并选择“独特”,但我做错了
select transactions.type, id
from datasource
group by id, transactions.type
这给了我一张具有两种交易类型的表:dep或withdraw。大多数ID具有两行,其中一行是dep,另一行是提取。我只想选择仅具有提款交易类型的ID
答案 0 :(得分:0)
使用where条件和not exists
select transactions.type, id from datasource t1
where type='withdraw'
and not exists( select 1 from datasource t2 where t1.id=t2.id
and type='dep')
答案 1 :(得分:0)
您可以在group by
子句中使用having count(*)=1
select id
from datasource
where transactions_type in
(
select transactions_type, id
from datasource
group by transactions_type
having count(*)=1 )
由于“您正在尝试找出哪些ID仅具有一种交易类型”
如果您专门寻找transactions_type = 'withdraw'
,请在上述Select语句的末尾添加and transactions_type = 'withdraw'
。
P.S。我想有一个transactions.type
的类型,应该是transactions_type
,不是吗?
答案 2 :(得分:0)
我认为聚合可以满足您的需求。但是,我很困惑您的数据结构是什么。在某处需要join
:
select ds.id, min(t.type)
from datasource ds join
transactions t
on ds.? = t.? -- what is the join key?
group by ds.id
having min(t.type) = max(t.type);
如果transactions.type
实际上是datasource
中的一列,则:
select ds.id, min("transactions.type")
from datasource ds
group by ds.id
having min("transactions.type") = max("transactions.type");
答案 3 :(得分:0)
类似于其他答案,但更简单:
select id, count(distinct transactions.type)
from datasource
group by id
having count(distinct transactions.type) = 1
目前还不清楚,transactions.type是什么。该列名似乎无效。还是要写transactions_type
?