Oracle Sql根据另一个表中的重复项计算表中的行数
我在OracleSQLDeveloper中有两个表,它们由键ID+状态连接。第一个t1有4列:Oracle Sql根据另一个表中的重复项计算表中的行数,sql,oracle,Sql,Oracle,我在OracleSQLDeveloper中有两个表,它们由键ID+状态连接。第一个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 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
看。
结果:
谢谢你的反馈。我正在使用模式中的表,所以我不确定我的语法是否正确。我继续在schema.t1 left join中得到一个语法错误,它表示where_子句和unbalanced_nonblock_stmt。下面是我的查询:选择A.state,countdistinct B.ID counter from select ID,state from schema.t1 group by ID,state have count>1 schema.t1 left join select ID,state from schema.t2 group by ID,state have count<3 schema.t2 B on A.ID=B.ID和A.state=B.state group by A.state更改为:选择A.state,countdistinct B.ID计数器与select ID、state from schema.t1 group by ID、state from count*>1A left join select ID、state from schema.t2 group by ID、state from count*<3BON A.ID=B.ID和A.state=B.state group by A.state
select t1."state", count(distinct t2.id) counter
from (
select id, "state",
count(*) over (partition by id, "state") counter1
from t1
) t1 left join (
select id, "state",
count(*) over (partition by 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"
> state | COUNTER
> :---- | ------:
> VA | 1
> MI | 0