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
展开
 我来答
百度网友f81c7e5e39
2018-03-18 · TA获得超过399个赞
知道小有建树答主
回答量:553
采纳率:56%
帮助的人:73.5万
展开全部

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 广告
常见的查询城市人口数据途径有以下几个:1. 国家统计网站:中国各级单位及公众了解全国及各地区经济社会发展和人口变动情况的重要渠道之一。其网站可以查询全国及各地各级行政区域的人口数据,包括城市总人口、年龄结构、性别比例等。2. 地方统计网站:... 点击进入详情页
本回答由数位汇聚提供
sysplay
2018-03-18 · TA获得超过1155个赞
知道小有建树答主
回答量:663
采纳率:86%
帮助的人:537万
展开全部
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

大体是这样的

追问
如何说需要计算的字段很多很多,有没有更简便一些的处理方法,因为每一个需要计算的字段都去写一个判断感觉有些繁琐,而坏的状态的字段只是需要统计一个数目就可以了
追答
  1. 建议采用下面的代码,好处时只要在一个地方维护好坏的判断依据.

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)

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式