SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 13.11.2013 12:14:14

Bust_Ed
Завсегдатай
Откуда: Москва
Зарегистрирован: 13.11.2013
Сообщений: 48

Вложенный запрос

Привет.

Подскажите, как вложенный запрос сделать с фильтром из данных внешнего запроса?

Т.е. идея какая. Есть таблица (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 в текущей строчке? smile

Неактивен

 

#2 13.11.2013 12:23:09

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Вложенный запрос

Попробуйте

SELECT
  t.*,
  t.КОЛИЧЕТВО_ОЧКОВ/(SELECT COUNT(*) FROM teams WHERE gruppa=t.gruppa)
FROM
  teams t;


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 13.11.2013 12:35:12

Bust_Ed
Завсегдатай
Откуда: Москва
Зарегистрирован: 13.11.2013
Сообщений: 48

Re: Вложенный запрос

Table 'parser.t' doesn't exist

from teams t - что делает?

----
Упс.

Все работает. Блин, так и думал, что это элементарно. smile Спасибо вам огромное.

Отредактированно Bust_Ed (13.11.2013 12:36:34)

Неактивен

 

#4 13.11.2013 12:57:04

Bust_Ed
Завсегдатай
Откуда: Москва
Зарегистрирован: 13.11.2013
Сообщений: 48

Re: Вложенный запрос

А может еще подскажете? smile В БД в таблице хранится 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".

Неактивен

 

#5 13.11.2013 13:07:29

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Вложенный запрос

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, если честно, не очень представляю smile.
Разве что напрямую, через if. но это не очень вариант.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#6 13.11.2013 13:09:33

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Вложенный запрос

select if(`ГРУППА`='gruppa_a','A',if(`ГРУППА`='gruppa_b','B',`ГРУППА`)) as `ГРУППА` ...

Неактивен

 

#7 13.11.2013 13:10:05

Bust_Ed
Завсегдатай
Откуда: Москва
Зарегистрирован: 13.11.2013
Сообщений: 48

Re: Вложенный запрос

Понял. Тогда буду цеплять еще одну таблицу, и через id связывать. smile

Неактивен

 

#8 13.11.2013 13:13:54

Bust_Ed
Завсегдатай
Откуда: Москва
Зарегистрирован: 13.11.2013
Сообщений: 48

Re: Вложенный запрос

vasya написал:

select if(`ГРУППА`='gruppa_a','A',if(`ГРУППА`='gruppa_b','B',`ГРУППА`)) as `ГРУППА` ...

Запрос длинноватый получится, ну и по фиг. Зато все в одном месте. smile Спасибо.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson