oracle 统计查询子集下所有记录数

表一CREATETABLETB1_TEST(CIDNUMBER,NAMEVARCHAR2(100),PIDNUMBERDEFAULT0)INSERTINTOTB1_TES... 表一
CREATE TABLE TB1_TEST
  (
  CID NUMBER,
  NAME VARCHAR2(100),
  PID NUMBER DEFAULT 0
  )
  INSERT INTO TB1_TEST(CID ,NAME,PID) VALUES('1','test1','0');
  INSERT INTO TB1_TEST(CID ,NAME,PID) VALUES('2','test2','1');
  INSERT INTO TB1_TEST(CID ,NAME,PID) VALUES('3','test3','0');
  INSERT INTO TB1_TEST(CID ,NAME,PID) VALUES('4','test4','1');
  INSERT INTO TB1_TEST(CID ,NAME,PID) VALUES('5','test5','2');
表二
CREATE TABLE TB2_TEST
  (
  ID NUMBER,
  CONTENT VARCHAR2(1000),
  CID NUMBER
  )
  INSERT INTO TBL_TEST(ID,CONTENT,CID ) VALUES('1','test1','2');
  INSERT INTO TBL_TEST(ID,CONTENT,CID ) VALUES('2','test2','2');
  INSERT INTO TBL_TEST(ID,CONTENT,CID ) VALUES('3','test3','1');
  INSERT INTO TBL_TEST(ID,CONTENT,CID ) VALUES('4','test4','4');
  INSERT INTO TBL_TEST(ID,CONTENT,CID ) VALUES('5','test5','5');

现在需要统计表二中所有CID为表一一级子集的记录数(一级子集即未根节点下第一级的集合)
注:这里说的统计一级子集的记录数并不是只统计一级子集,而是指显示一级子集,统计则需统计对应一级子集下所有子集的表二记录数

统计结果为
CID NAME SUM
1 test1 5
3 test3 0

求高手解答 sql如何写?
1、目标:是统计表二TB2_TEST中数据
2、展示:查询只显示表一TB1_TEST中一级节点CID、NAME及表二中记录数SUM
3、数据:不只是统计一级节点下的表二记录数,而是表二中对应表一所有一级节点下的所有子节点的记录数;

补充说明
表一TB1_TEST中存放数据是存在层级关系的,PID即为父级的CID;
一级子集就是跟节点下的子集,如上展示的根节点为"0",所有PID='0'的所有记录就是一级子集;
表二TB2_TEST中以CID跟表一TB1_TEST关联
展开
 我来答
198901245631
推荐于2017-10-10 · TA获得超过3.5万个赞
知道大有可为答主
回答量:9037
采纳率:92%
帮助的人:1737万
展开全部
实现思路:
第一步:先将所有子集数据进行分组。
sql:select classname from tablename1 group by classname;
第二步:将需要统计的结果用count函数进行计数即可。
sql:select classname, count( username) from tablename1 group by classname;
解释:以上语句就是统计出某个班级的所有同学的个数。
micro0369
推荐于2017-09-12 · TA获得超过1.2万个赞
知道大有可为答主
回答量:9250
采纳率:85%
帮助的人:4060万
展开全部
没有看懂,
以你的数据示例来说,cid=1 如何 取出5个记录数的? cid=5,又如何得出0 的 ?
追问
从表一的关系可以看出CID=2和4的记录的父节点ID为1,而CID=5的父节点ID为2,所以CID=5的记录也是属于父节点ID为1的,是子集的子集,所以表二中CID为2、1、4、5的均属于cid=1的记录是5条,以此类推CID=3的记录则为0
追答
分一定要给我,累死我了

select tb1.cid,name,
(select count(tb.id) from
(select CONNECT_BY_ROOT(t1.cid) rootid,t1.cid
from tb1_test t1
connect by prior t1.cid = t1.pid start with t1.pid = 0) ta
,TB2_TEST tb
where ta.cid = tb.cid and ta.rootid = tb1.cid) sum
from tb1_test tb1
where pid = 0
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jmdywch
2012-11-06
知道答主
回答量:35
采纳率:0%
帮助的人:11万
展开全部
select a.CID,a.name, count(*) SUM from TABLE TB2_TEST a ,TABLE TB1_TEST b where
a.CID=b.CID group by a.CID,a.name
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tangyjlovecc
2012-11-06 · TA获得超过458个赞
知道小有建树答主
回答量:839
采纳率:0%
帮助的人:411万
展开全部
select CID,NAME,(select sum(ID) from TB2_TEST where TB2_TEST.CID=T.CID) from TB1_TEST T
追问
谢谢回答
但并未满足我的需求,我再补充一下
1、目标:是统计表二TB2_TEST中数据
2、展示:查询只显示表一TB1_TEST中一级节点CID、NAME及表二中记录数SUM
3、数据:不只是统计一级节点下的表二记录数,而是表二中对应表一所有一级节点下的所有子节点的记录数;

不知道这样描述清楚了不
追答
select CID,NAME,(select count(ID) from TB2_TEST where TB2_TEST.CID=T.CID) from TB1_TEST T
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式