как использовать подзапрос статистических функций в основном запросе - PullRequest
0 голосов
/ 26 ноября 2011

Это моя схема базы данных

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

Но как я могу использовать результаты агрегатных функций {NumberOfRaces and winnings} в основном запросе?

1 Ответ

0 голосов
/ 26 ноября 2011

Используйте подвыбор, чтобы определить совокупные значения по нужному ключу, и внутренне присоедините его к основной таблице. Я собираюсь псевдо-кодировать это и позволить вам собрать это ... кажется, домашнее задание.

Select id, sum(winnings) from table group by 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 как на столбцы, связанные с этим идентификатором. Внутреннее объединение будет означать, что лошади без выигрышей выбрасываются, а при левом объединении будут показаны все, независимо от выигрыша.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...