如何解决基于另一个表中重复项的表中Oracle Sql计数行
我在Oracle SQL Developer中有两个表,它们由一个键ID + state联接。第一(t1)有4列:
ID measurement Value state
123 Nitrogen .7 VA
123 Oxygen .1 VA
456 Nitrogen .6 MI
456 Carbon .5 MI
456 Oxygen .3 MI
第二个表(t2)有3列:
ID date state
123 5/20/20 VA
123 8/3/16 VA
我需要编写一个查询,该查询首先在t2中搜索重复的ID +状态,然后在第二个表中搜索该重复的ID +状态少于三行的实例。返回值将是t2中重复的ID的数量,并且对于t2中的每个状态,t1中的ID少于三行。 在此示例中:
VA - 1
MI - 0
在Oracle中有一种简单的方法吗? 我尝试了以下SQL的迭代,但是找不到正确的语法,并且想知道是否有更好的方法。我已经尝试过以下查询的多次迭代:
select a.ID,a.state count() totalcount from t2 A left join t1 B on a.ID=b.ID and a.state=b.state where b.ID having count < 3 group by a.id having count () >1
谢谢!
解决方法
根据您的条件分别在eah表中进行汇总,然后加入以汇总不同ID的数量:
select t1.state,count(distinct t2.id) counter
from (
select id,state from t1
group by id,state
having count(*) > 1
) t1 left join (
select id,state from t2
group by id,state
having count(*) < 3
) t2
on t2.id = t1.id and t2.state = t1.state
group by t1.state
或使用COUNT()
窗口功能:
select t1."state","state",count(*) over (partition by id,"state") counter1
from t1
) t1 left join (
select id,"state") counter2
from t2
) t2
on t2.id = t1.id and t2."state" = t1."state"
and t1.counter1 > 1 and t2.counter2 < 3
group by t1."state"
请参见demo。
结果:
> state | COUNTER
> :---- | ------:
> VA | 1
> MI | 0
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。