这是我的数据库架构
Horse(horseId, horseName, age, gender, registration, stableId)
Owner(ownerId, lname, fname)
Owns(horseId, ownerId)
Stable(stableId, stableName, location, colors)
Trainer(trainerId, lname, fname, stableId)
Race(raceId, raceName, trackName, raceDate, raceTime)
RaceResults(raceId, horseId, results, prize)
Track(trackName, location, length)
我想把它写成一个查询:
对于每场比赛超过三场的每匹马,列出每匹马的马名,总奖金和比赛次数。列名称应为“Horse Name”,“Winnings”和“Races”。结果应按降序排列。
我把这个子查询写成了一个开头:
SELECT horseid, COUNT( horseid ) AS NumberOfRaces, SUM( prize ) winnings
FROM raceresults
GROUP BY horseid
HAVING COUNT( horseid ) >3
但是如何在主查询中使用聚合函数结果{NumberOfRaces和winnings}?
答案 0 :(得分:0)
使用子选择按所需的键确定聚合值,然后将其连接回主表。我要伪代码,让你把它放在一起......看起来像是一个家庭作业。
Select id, sum(winnings) from table group by id
这会产生一个id列表及其获胜(任何聚合的概念相同,而不仅仅是这个总和)。你可以在这个级别有几个聚合... id,sum(winnings),count(winnings),avg(winnings)将在一个声明中工作)。在它周围放置一组括号并将其称为子查询。把它加回原来的陈述......
...
from
(select id, sum(winnings) as winnings) a
inner join horse h on h.id = a.id
您现在可以将h。*或a.winnings视为与该ID相关的列。内部联接将意味着没有奖金的马匹被丢弃,左边的联接将显示所有不管奖金。