Давайте этот шаг за шагом.
У вас есть две информации, которую вы ищете: кто выиграл гонку, и сколько у них гонок.
Принимая первый, вы можете выбрать отдельную runnersid, где они имеют первое место на финише:
SELECT DISTINCT runnersid
FROM runs
WHERE finish = 1;
Для второго, вы можете выбрать все runnersid, где они имеют первое место на финише, подсчитать количество возвращаемых строк, и группы по runnersid, чтобы получить общее количество побед для каждого:
SELECT runnersid, COUNT(*) AS numWins
FROM runs
WHERE finish = 1
GROUP BY runnersid;
Второй на самом деле имеет все, что вы хотите. Вам не нужно ничего делать с этим первым запросом, но я использовал его, чтобы продемонстрировать мыслительный процесс, который я предпринимаю при попытке выполнить такую задачу.
Вот пример SQL Fiddle.
EDIT
Как вы уже видели, вы на самом деле не нужен SUM здесь. Поскольку финал представляет собой место в гонке, вы не хотите, чтобы SUM это значение, но вы хотите ВЫБРАТЬ количество побед.
EDIT2
Дополнительное редактирование на основе требований OPS. Вышеупомянутое не соответствует потребностям OP, но я оставил это в качестве ссылки на любых будущих читателей. То, что действительно нужно OP, как я понимаю сейчас, - это число детей, у каждого отца есть побег. Я снова объясню свой мыслительный процесс шаг за шагом.
Сначала я написал простой запрос, который тянет всех победивших пар отца-сына. Я был в состоянии использовать GROUP BY, чтобы получить различные пары выигрышные:
SELECT father, name
FROM runs
WHERE finish = 1
GROUP BY father, name;
После того, как я сделал это, я использовал это подзапрос и COUNT (*), чтобы получить число победителей для каждого отца (это означает, что мне приходится группироваться отцом):
SELECT father, COUNT(*) AS numWinningChildren
FROM(SELECT father, name
FROM runs
WHERE finish = 1
GROUP BY father, name) t
GROUP BY father;
Если вам просто нужны отцы с выигрышными детьми, все готово. Если вы хотите видеть всех отцов, я бы написал один запрос, чтобы выбрать всех отцов, присоединить его к нашему результату выше и заменить любые значения, где numWinningChildren
имеет значение null, с 0.
Я оставлю эту часть вам немного бросить вызов себе. Также из-за того, что SQL Fiddle в данный момент не работает, и я не могу проверить, о чем я думал, но я смог успешно протестировать те, которые были выше.
Если вы хотите, рассмотрим следующие этой простой двухступенчатой курс действий: 1. Если вы еще не сделали этого, обеспечить надлежащие DDLS (и/или sqlfiddle), так что мы можем более легко реплицировать проблему. 2. Если вы еще этого не сделали, укажите желаемый набор результатов, соответствующий информации, представленной на шаге 1. – Strawberry
@strawberry спасибо за предложение, я добавил скрипку. – stemie
этот вопрос на самом деле довольно забавно читать :) – Adam