Задавайте вопросы, мы ответим
Вы не зашли.
Хм.... у меня что-то работа с if и MIN, MAX не прошла. Попробую Ваш вариант.
Неактивен
Теперь это выглядит так:
SELECT T.Name, COUNT(r) FROM
(
SELECT r.Game, Times.name, r FROM
(
SELECT m.Game, if(MAX(p)-min(p)=0,-1,max(p)) as r FROM
(
SELECT Game, Name, SUM(Point) AS p FROM Bout join Participant USING(Participant)
GROUP BY 1,2
)
AS M INNER JOIN Games ON Games.Name = M.game WHERE Date BETWEEN '2011/02/01' AND '2011/04/30'
GROUP BY m.Game
)
AS r INNER JOIN Times ON Times.Game = r.Game AND Times.p = r.r
)
AS T
GROUP BY T.Name
А есть возможность указать ту команду, у которой 0 побед?
Отредактированно pkhell (24.03.2011 21:09:53)
Неактивен
Можно. Объединить полученный результат со списком игравших в этот период команд и если нет соответствия, то 0. Но у вас таких команд нет
Неактивен
Все бы ничего, но мне надо как-то вывести и команду, которая имеет 0 побед. ((
Неактивен
Вы не много промахнулись с учетом времени. Там где у вас
FROM Bout join Participant
вместо Bout нужно Bout объединить с games и учесть период в три месяца.
Ну, и если хотите одним запросом, то избавляйтесь от times везде
Неактивен
Не понимаю суть последнего вашего изложения.
Неактивен
pkhell написал:
Я же сделал уже одним запросом, разве не видели?
Видел, но в итоговом запросе осталось упоминание таблицы times
pkhell написал:
Не понимаю суть последнего вашего изложения.
О том что не везде избавились от times или что не в том месте учитываете дату?
Неактивен
Я уже заметил проблему. Попробую исправить.
Неактивен
pkhell написал:
Все бы ничего, но мне надо как-то вывести и команду, которая имеет 0 побед. ((
В предыдущем посте №53 я ответил как это сделать. Измените дату, чтобы в указанный период была команда не имевшая ни одной победы и отлаживайте запрос.
При текущих данных за три указанных месяца каждая команда имеет хотя бы одну победу.
Неактивен
Вы не правы. У меня сделано так, что одна команда не выиграла ни одной игры. И я все не пойму, на что заменить Times? Она ведь так удачно собрана, но избавиться от нее надо.
Отредактированно pkhell (24.03.2011 21:38:03)
Неактивен
Это которая? И что показывает
Неактивен
Альянс по очкам не выиграла ни одной игры. Данный запрос разбивает на общую сумму каждой команды в каждой игре. Или вы не об этом?
Отредактированно pkhell (24.03.2011 21:44:32)
Неактивен
Я просил вас привести результат выполнения этого запроса, чтобы вместе могли увидеть, что в игре "баталион" от 9 марта "альянс" набрал 17 очков, а "орда" 13. Из чего следует, что "альянс" выиграл
Неактивен
pkhell написал:
И я все не пойму, на что заменить Times? Она ведь так удачно собрана, но избавиться от нее надо.
На тот запрос, который её формировал, т.е.
Неактивен
Неактивен
pkhell написал:
Я забыл, что переправил таблице немного. В ней он не побеждает. ))
Править исходные данные или менять временной интервал, не суть принципиально. Решение см пост №53
Неактивен
Так данный запрос будет входить в подзапрос r, а, значит, не вытащить результат уже. Начинаю сходить с ума....
Неактивен
Попытался сделать:
SELECT T.Name, COUNT(r) FROM
(
SELECT r.Game, M.name r FROM
(
SELECT m.Game, if(MAX(p)-min(p)=0,-1,max(p)) as r FROM
(
SELECT Game, Name, SUM(Point) AS p FROM Bout join Participant USING(Participant)
GROUP BY 1,2
)
AS M INNER JOIN Games ON Games.Name = M.game WHERE Date BETWEEN '2011/02/01' AND '2011/04/30'
GROUP BY m.Game
)
AS r INNER JOIN (SELECT Game, Name, SUM(Point) AS p FROM Bout join Participant USING(Participant)
GROUP BY 1,2) AS M ON M.Game = r.Game AND M.p = r.r
)
AS T
GROUP BY T.Name
Но такая система не хочет работать.
Неактивен
Не могли бы Вы подредактировать этот запрос так, как будет правильно, а то я уже основательно запутался?
Неактивен
Неактивен
Что-то пытаюсь я соединить внешним соединением таблицу Games с Bout и Participant, но не получается.
Отредактированно pkhell (24.03.2011 23:04:34)
Неактивен
Попытался собрать следующую конструкцию:
SELECT T.Name, COUNT(r) FROM
(
SELECT r.Game, name, r FROM
(
SELECT m.Game, if(MAX(p)-min(p)=0,-1,max(p)) as r FROM
(
SELECT B.Game, B.Name, SUM(Point) AS p FROM Bout AS B INNER JOIN Participant USING(Participant) right outer join Games ON Games.Name = Bout.Game WHERE Date BETWEEN '2011/02/01' AND '2011/04/30'
GROUP BY 1,2
)
AS M
GROUP BY m.Game
)
AS r INNER JOIN (
SELECT Game, Name, SUM(Point) AS p FROM Bout join Participant USING(Participant)
GROUP BY 1,2
) x ON x.Game = r.Game AND x.p = r.r
)
AS T
GROUP BY T.Name
Не работает. Ругается на B.Name. Как еще можно связать я не знаю. Остается надеяться только на Вас.
Отредактированно pkhell (24.03.2011 23:41:55)
Неактивен
Неудивительно, так как в таблице bout нет колонки name.
И ещё обратите внимание, что когда вы указали, что таблица bout имеет алиас b, то в дальнейшем везде нужно писать именно b, а не bout.
Неактивен
Что отсутствует Name - это я вроде как понял, а вот с алиасом пролетел. А почему связь указывается именно подобным образом? Имеется в виду, что сначала идет обычное соединение, а потом внутреннее. Почему? Спасибо, что помогли!!!
Отредактированно pkhell (25.03.2011 00:01:16)
Неактивен
INNER JOIN писали вы, а я написал просто join.
Вообще-то это синонимы, а лишнее слово писать лень
Неактивен