Sql 使用聚合来自2个表的数据进行查询
我的Oracle数据库中有三个表:Sql 使用聚合来自2个表的数据进行查询,sql,oracle,aggregate,Sql,Oracle,Aggregate,我的Oracle数据库中有三个表: 人民: IdPerson PK Name Surname 收益: IdEarning IdPerson EarningValue IdAward PK IdPerson FK AwardDescription 奖项: IdEarning IdPerson EarningValue IdAward PK IdPerson FK AwardDescription 一个人可以有很多收入 收入可以有很多,也可以没有任何收入 一个人可以有很多奖项,一
人民:
IdPerson PK
Name
Surname
收益:
IdEarning
IdPerson
EarningValue
IdAward PK
IdPerson FK
AwardDescription
奖项:
IdEarning
IdPerson
EarningValue
IdAward PK
IdPerson FK
AwardDescription
- 一个人可以有很多收入
- 收入可以有很多,也可以没有任何收入
- 一个人可以有很多奖项,一个奖项,或者没有任何奖项
- 姓
- 此姓氏的人所有收入价值的总和
- 此人的所有奖励计数
有可能进行这样的查询吗?是的,有可能,您只需加入表即可
SELECT Peoples.Surname, SUM(Earnings.EarningValue) as Earnings, COUNT(Awards. IdPerson) as Awards
FROM Peoples
INNER JOIN Earnings
ON Peoples.IdPerson = Earnings.IdPerson
INNER JOIN Awards
ON Peoples.IdPerson = Awards.IdPerson
GROUP BY Peoples.IdPerson;
是的,当然有可能。 您只需使用多个联接查询联接这些表,然后应用sum()函数获取收入之和,并应用Count()计算奖励数量。 请尝试以下查询:
SELECT P.Surname,
Sum(E.EarningValue)AS Total_Earnings,
Count(A.IdAward) AS total_awards
FROM Peoples P
LEFT JOIN Earnings E
ON P.IdPerson = E.IdPerson
LEFT JOIN Awards A
ON A.IdPerson = P.IdPerson
GROUP BY P.IdPerson;
返回此文件的内容:
SELECT p.Surname,
(SELECT NVL(SUM(e.EarningValue), 0)
FROM Earnings e WHERE e.IdPerson = p.IdPerson) as SumEarnings,
(SELECT COUNT(aIdAward)
FROM Awards a WHERE a.IdPerson = p.IdPerson) as CntAwards
FROM Peoples p
对于
sum
,可能还需要coalesce
(在null
上方显示0
)。按人分组。姓氏我尝试过,但该查询返回的奖励太多,且总和中的收入值太高。它似乎在某处复制。还有一件事:我的db中有一些重复的姓氏,所以我认为不能按姓氏分组。尝试按id分组。告诉我如果总数仍然很高,那么分组也有问题,因为我需要显示姓氏,而不是PersonidWellcome来堆栈溢出。提供一些评论来帮助人们理解为什么你的答案能够解决他们的问题是个好主意。有一个问题:计算值太高。。例如,一个人有6个奖项,在这个计算中有36个奖项,这就是我需要的!非常感谢。当我制作测试专栏时,它对我起到了作用,并且这段代码选择了Peoples。姓氏,SUM(Earnings.EarningValue)作为收入,COUNT(Awards.IdPerson)作为Peoples.IdPerson上的Peoples内部加入收入的奖励。IdPerson=Earnings.IdPerson=Awards.IdPerson组BY Peoples.IdPerson;