我的Oracle db中有三个表:
民族:
IdPerson PK
Name
Surname收益:
IdEarning
IdPerson
EarningValue奖:
IdAward PK
IdPerson FK
AwardDescription我想要进行一个查询,它将返回3列:
一个重要的事情是,我也需要显示:0的价值,如果人没有任何奖励或收入。有一种可能,人有奖励,但没有任何收入。
是否可以作出这样的查询呢?
发布于 2014-10-25 22:21:24
SELECT p.IdPerson,
p.Surname,
NVL(SUM(e.EarningValue), 0) as SumEarnings,
COUNT(a.IdAward) as CntAwards
FROM Peoples p
LEFT JOIN Earnings e ON p.IdPerson = e.IdPerson
LEFT JOIN Awards a ON p.IdPerson = a.IdPerson
GROUP BY p.IdPerson,
p.Surname;返回的内容如下:
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发布于 2014-10-25 20:59:12
是的,这是可能的,你只要加入这些桌子就行了。
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;发布于 2014-10-25 21:01:20
是的-当然有可能。您只需要使用多个联接查询连接表,然后应用sum()函数来获取收入和,并使用Count()来计数no。颁奖典礼。请尝试以下查询:
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; https://stackoverflow.com/questions/26567121
复制相似问题