Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> использования результата вложенного запроса, в вычисляемом поле 
:(
    Опции темы
solenko
Дата 6.10.2008, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 4
Всего: 67



День добрый.
Результат поздавпроса нужно использовать для вычисления остальных полей. Например:
Код

SELECT t1.field1, (SELECT SUM(t2.filed2) FROM t2 WHERE t2.filed1 = t1.filed1) as t2_sum, t1.filed3/t2_sum, t1.filed4/t2_sum
FROM t1

Т.е. нужно каким-то образом обращатся к результатам подзапроса при вычислении других полей. Вычислять позже не получится -- нужна сортировка + limit




--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
skyboy
Дата 6.10.2008, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



почему бы не сделать inner join на вложенный запрос?
Код

SELECT t1.field1, t3.sum_field2
FROM t1
INNER JOIN (
SELECT t2.field1, sum(t2.field2) as sum_field2
FROM t2
GROUP BY t2.field1
) as t3
ON t3.field1 = t1.field1

PM MAIL   Вверх
solenko
Дата 6.10.2008, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 4
Всего: 67



skyboy, спасиб. В принципе, работает. Правда время выполнения запроса возросло в 3 раза (в моем случае это критично т.к. с двух секунд до шести). Сейчас попробую найти как его ускорить.

Другого пути нет?




--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
Akina
Дата 6.10.2008, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(solenko @  6.10.2008,  17:16 Найти цитируемый пост)
нужно каким-то образом обращатся к результатам подзапроса при вычислении других полей. Вычислять позже не получится 

Так сделать не получится - потому как это скрытая рекурсия.

Цитата(solenko @  6.10.2008,  18:10 Найти цитируемый пост)
Другого пути нет?

Попробуй совместить все таблицы-источники в рамках подзапроса, а вычислять в запросе-обертке:
Код

Select field1, t2_sum, field3/t2_sum, field4/t2_sum
FROM
( SELECT t1.field1, SUM(t2.field2) as t2_sum, t1.field3, t1.field4
  FROM t1
  INNER JOIN t2 
  ON t2.field1 = t1.field1)

Хотя, если исходить из логики исходного запроса, там должен быть LEFT JOIN, но либо LEFT=INNER, либо divide by zero.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0572 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.