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以获得马的名称,并按顺序获得适当的排序