Mysql 如何在主查询中使用聚合函数子查询

Mysql 如何在主查询中使用聚合函数子查询,mysql,sql,Mysql,Sql,这是我的数据库模式 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, r

这是我的数据库模式

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)
我想把它写成一个查询:

对于每匹跑过三场以上比赛的马,列出每匹马的马名、总赢款和比赛次数。列名称应为“马名”、“赢款”和“比赛”。结果应按赢款降序排列

我写了这个子查询作为开始:

SELECT horseid, COUNT( horseid ) AS NumberOfRaces, SUM( prize ) winnings
FROM raceresults
GROUP BY horseid
HAVING COUNT( horseid ) >3

但是如何在主查询中使用聚合函数results{NumberOfRaces and winnings}?

使用子选择来确定所需键的聚合值,并将其内部联接回主表。我将对这段代码进行伪编码,让你们把它组合在一起……看起来确实像是一个家庭作业

Select id, sum(winnings) from table group by id
这将产生一个id及其获奖者的列表(对于任何聚合,都是相同的概念,而不仅仅是这个总和)。在这个级别上可以有多个聚合。。。id、sum(赢款)、count(赢款)、avg(赢款)将在一个语句中工作)。在它周围放一组括号,并称之为子查询。把这个加入到你最初的陈述中

...
from
(select id, sum(winnings) as winnings) a
inner join horse h on h.id = a.id

现在,您可以将h.*或a.winnings作为与该ID相关的列来引用。内部联接将意味着不带winnings的马将被丢弃,一个左联接将显示所有,而不考虑winnings。

这是一个家庭作业吗?您的示例SQL非常接近,您真的应该能够用一个查询完成它,而不需要子查询。查找JOIN以获得马的名称,并按顺序获得适当的排序