Oracle数据库查询问题,一对多多表统计查询
有三张表ABC,A对应B中多个数据,B和C一对一,想做这样的统计,统计出以A的id为group,统计B中对应A的数据状态为好的和坏的个数,最后再将好的和C连接进行统计计算...
有三张表ABC,A对应B中多个数据,B和C一对一,想做这样的统计,统计出以A的id为group,统计B中对应A的数据状态为好的和坏的个数,最后再将好的和C连接进行统计计算,最后效果像这样
id ----总的----好的----坏的----良品率-----好的B每一个*C的某个属性的总和
1 10 6 4 0.6 320 展开
id ----总的----好的----坏的----良品率-----好的B每一个*C的某个属性的总和
1 10 6 4 0.6 320 展开
2个回答
展开全部
SELECT A.ID,
(SELECT COUNT(*) FROM B WHERE A.ID=B.ID group by id) as "总的"
(SELECT COUNT(*) FROM B WHERE A.ID=B.ID AND B.TYPE='好的' group by id) as "好的",
(SELECT COUNT(*) FROM B WHERE A.ID=B.ID AND B.TYPE='坏的' group by id) as "坏的",
(SELECT COUNT(*) FROM B WHERE A.ID=B.ID AND B.TYPE='好的' group by id)
/
(SELECT COUNT(*) FROM B WHERE A.ID=B.ID group by id) AS "良品率"
(SELECT N1 FROM
(SELECT SUM(C.P1) AS N1,B.ID FROM C JOIN B ON B.ID=C.ID AND B.PID=C.PID AND B. B.TYPE='好的' ) T1 WHERE T1.ID=A.ID) AS"好的B每一个*C的某个属性的总和"
FROM A
,
数位汇聚
2023-08-28 广告
2023-08-28 广告
常见的查询城市人口数据途径有以下几个:1. 国家统计网站:中国各级单位及公众了解全国及各地区经济社会发展和人口变动情况的重要渠道之一。其网站可以查询全国及各地各级行政区域的人口数据,包括城市总人口、年龄结构、性别比例等。2. 地方统计网站:...
点击进入详情页
本回答由数位汇聚提供
展开全部
Select
Id,
Count(B.id) As 总的,
Count(Case When B.状态='好的' Then 1 Else Null End) As 好的,
Count(Case When B.状态='坏的' Then 1 Else Null End) As 坏的,
Count(Case When B.状态='好的' Then 1 Else Null End)/Count(B.*) As 良品率,
Sum(When B.状态='好的' Then C.某个属性 Else 0 End) As 好的B每一个*C的某个属性的总和
From
A,B,C
Where
A.Id=B.id
And B.Name=C.Name
大体是这样的
追问
如何说需要计算的字段很多很多,有没有更简便一些的处理方法,因为每一个需要计算的字段都去写一个判断感觉有些繁琐,而坏的状态的字段只是需要统计一个数目就可以了
追答
建议采用下面的代码,好处时只要在一个地方维护好坏的判断依据.
Select
id,
count(*) As 总的,
Sum(好坏) As 好的, --在子查询中坏的对应的好坏字段值是0
count(*)-Sum(好坏) As 坏的,
Sum(好坏*属性) As 好的对应的C表属性和
From
(
Select
A.Id,
Count(Case When B.状态='好的' Then 1 Else 0 End) As 好坏, --只需要维护这里
C.属性
From
A,B,C
Where
A.Id=B.id
And B.Name=C.Name
) D
Group By Id
2.如果坏的容易计算,你可以线计算坏的,然后好的数量=总的-坏的.
3.可以考虑归纳合并一下条件.例如 (A=1 And B=2) Or (A=1 And B=3),合并成A=1 And B in (2,3)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询