Задавайте вопросы, мы ответим
Вы не зашли.
Привет.
Подскажите, как вложенный запрос сделать с фильтром из данных внешнего запроса?
Т.е. идея какая. Есть таблица (teams) вот такого вида:
команда1 группаА 3
команда2 группаА 4
команда3 группаБ 6
команда4 группаБ 7
команда5 группаБ 6
Хочу одним запросом вытащить удельный вес очков команды в группе. Т.е. т.к. команды играют в разных группах, общее ранжирование можно сделать, поделив очки команды на количество команд в группе. Чисто вручную получается результат такой:
КОМАНДА ГРУППА ОЧКИ СР.ОЧКИ
команда1 группаА 3 1,5
команда2 группаА 4 2
команда3 группаБ 6 2
команда4 группаБ 7 2,33
команда5 группаБ 6 2
Как я делаю:
SELECT teams.*, (SELECT COUNT(*) FROM teams WHERE gruppa=teams.gruppa) AS grupteams FROM teams
Это первый шаг, хочу получить таблицу вида:
КОМАНДА ГРУППА ОЧКИ КОМАНД_В_ГРУППЕ
команда1 группаА 3 2
команда2 группаА 4 2
команда3 группаБ 6 3
команда4 группаБ 7 3
команда5 группаБ 6 3
В результате запроса получаю:
КОМАНДА ГРУППА ОЧКИ КОМАНД_В_ГРУППЕ
команда1 группаА 3 5
команда2 группаА 4 5
команда3 группаБ 6 5
команда4 группаБ 7 5
команда5 группаБ 6 5
Т.е. WHERE gruppa=teams.gruppa не отрабатывается. Каким образом можно сослаться на значение поля teams.gruppa в текущей строчке?
Неактивен
Попробуйте
SELECT
t.*,
t.КОЛИЧЕТВО_ОЧКОВ/(SELECT COUNT(*) FROM teams WHERE gruppa=t.gruppa)
FROM
teams t;
Неактивен
Table 'parser.t' doesn't exist
from teams t - что делает?
----
Упс.
Все работает. Блин, так и думал, что это элементарно. Спасибо вам огромное.
Отредактированно Bust_Ed (13.11.2013 12:36:34)
Неактивен
А может еще подскажете? В БД в таблице хранится gruppa_a и группа_b, можно ли в результате запроса заменить gruppa_a на A, а gruppa_b на B, чтобы вид такой был:
КОМАНДА ГРУППА ОЧКИ Ср.очки
команда1 А 3 5
команда2 А 4 5
команда3 Б 6 5
команда4 Б 7 5
команда5 Б 6 5
Все тоже самое могу через switch уже в php сделать, но т.к. там кроме групп еще и лиги есть, хотелось бы сортировку доделать в запросе mysql, для этого нужно, например, chetvertaya_liga переделать в "4".
Неактивен
gruppa_a заменить на A можно через функции substring и ucase
mysql> SELECT ucase(SUBSTRING('gruppa_a',8)); +--------------------------------+ | ucase(SUBSTRING('gruppa_a',8)) | +--------------------------------+ | A | +--------------------------------+ 1 row in set (0.00 sec)
Как преобразовывать chetvertaya_liga в 4, если честно, не очень представляю .
Разве что напрямую, через if. но это не очень вариант.
Неактивен
select if(`ГРУППА`='gruppa_a','A',if(`ГРУППА`='gruppa_b','B',`ГРУППА`)) as `ГРУППА` ...
Неактивен
Понял. Тогда буду цеплять еще одну таблицу, и через id связывать.
Неактивен
vasya написал:
select if(`ГРУППА`='gruppa_a','A',if(`ГРУППА`='gruppa_b','B',`ГРУППА`)) as `ГРУППА` ...
Запрос длинноватый получится, ну и по фиг. Зато все в одном месте. Спасибо.
Неактивен