Форум: "Начинающим";
Текущий архив: 2017.08.20;
Скачать: [xml.tar.bz2];
Вниз"Вложенные" вычисления в запросе Найти похожие ветки
← →
Дмитрий (2015-03-27 17:13) [0]Здравствуйте
Для отчетов строю запросы к mySQL
Много рассчитываемых полей.
Пример,
... Дата1 - ifnull(Дата2, Дата3) as ДлитРасч1...
... Дата4 + ДлитРасч1 as ДатаРасч1 ...
... Дата5 - ДатаРасч1 as ДлитРасч2 ...
Пытался использовать переменные, не получилось, такое использование оказалось не предусмотрено.
... @ДлитРасч1 :=Дата1 - ifnull(Дата2, Дата3) as ДатаРасч1,
Дата4 + @ДлитРасч1 as ДатаРасч1 ...
Приходится городить запросы к запросам или загромождать повторными вычислениями один запрос.
При необходимости внести изменения получается ужас.
Как делать правильно?
← →
KilkennyCat © (2015-03-27 20:15) [1]
> Как делать правильно?
смотря как нужно. может, нельзя нагружать сервер, а может можно...
ну а вообще, если возникает запутанность, то надо делать как удобней, чтоб как раз не в падать в ужас при изменениях, т.е. разбивать, оптимизировать, дефайны вводить вовсю.
ну и http://www.zoonman.ru/library/mysql_sr_and_t.htm
← →
Дмитрий (2015-03-27 20:25) [2]Mожно ли каким-то образом задать значение какого-либо поля и тут же его использовать
Select ID, 1+1 as K, (K - 1)/(K+1) as K2, ...
From T
В основном, система ругается на неопознаное поле либо амбигос.
И ладно бы всегда, в некоторых случаях прокатывает.
Мне с очередной сменой формулы приходится переносить пирамиду вычисляемых полей на слой глубже.
← →
Дмитрий (2015-03-27 20:29) [3]Попробую вынести функцию
← →
кгшзх © (2015-03-28 09:42) [4]select * from (
select ID, 1+1 as K, (K - 1)/(K+1) as K2, ...
from T
)
← →
Кщд © (2015-03-28 17:27) [5]>Дмитрий (27.03.15 20:25) [2]
>Мне с очередной сменой формулы приходится переносить пирамиду вычисляемых полей >на слой глубже.
считать на клиенте
либо смириться с грудой нечитаемого кода (та самая Ваша "пирамида")
← →
Дмитрий (2015-03-30 17:39) [6]Какой вариант запросов будет выполняться быстрее
f(field1,field2) - условная хранимая функция
операции с функцией тоже условны, как пример многократного обращения к расчетному значению в одном выражении
а) select ..., (f(field1,field2) - field3)/(f(field1,field2) - field3) ,... from t
или
б) с двухуровневым запросом/вьюхой
... view as q
select id, f(field1,field2) as FF from t
//---------------------------
select id, q.FF , (FF - field3)/(FF + field3)
from t
join q on q.id=t.id
← →
Кщд © (2015-03-31 06:17) [7]>Дмитрий (30.03.15 17:39) [6]
Вы не способны оценить план запроса и написать простейший скрипт, оценивающий скорость выполнения?
← →
Дмитрий (2015-03-31 21:26) [8]Очень надеялся с вашей помощью избежать выполнения двойной работы
по написанию обоих вариантов запросов
Тем более что их надо до...
← →
KilkennyCat © (2015-04-01 12:32) [9]я тоже хочу избежать двойной работы, давай часть моей рутинной, однообразной,
неинтересной и экспериментальной, а потому с неизвестным результатом, работы ты сделаешь?
> простейший скрипт, оценивающий скорость выполнения?
причем, встроен вроде в майскьюл
← →
Дмитрий (2015-04-01 17:01) [10]не знаете, так бы и сказали
← →
KilkennyCat © (2015-04-01 22:44) [11]Не знаю.
← →
Германн © (2015-04-02 02:47) [12]
> Дмитрий (01.04.15 17:01) [10]
>
> не знаете, так бы и сказали
>
На "слабо" пытался развести?
← →
Дмитрий (2015-04-02 18:30) [13]Причем тут "слабо".
Вы разве нашли у меня реальные запросы для сравнения?
Или конкретную реализацию функции?
Вопрос был по внутреннему механизму mySQL.
Будет ли в случае б) вызываться функция повторно, или же значение будет сохранено и использовано без повторного расчета
← →
Inovet © (2015-04-02 20:11) [14]> [13] Дмитрий (02.04.15 18:30)
> без повторного расчета
Ну так тебе и предложили попробовать и проверить. Делов на 1 минуту. Думается, будет там какой-нибудь
Column not found
нет же поля K.
← →
KilkennyCat © (2015-04-02 22:33) [15]
> Вы разве нашли у меня реальные запросы для сравнения?
> Или конкретную реализацию функции?
вот именно, что нет. потому что на
> Вопрос был по внутреннему механизму mySQL.
> Будет ли в случае б) вызываться функция повторно, или же
> значение будет сохранено и использовано без повторного расчета
можно ответить так: в некоторых случаях да, а в некоторых нет.
← →
Inovet © (2015-04-03 14:55) [16]А зачем придумали всякие пользовательские функции, в том числе и в SQL? Говорю заранее по требованию автора - не знаю, есть ли они в MySQL, как с ними бороться, и вообще ничего не знаю.
← →
Германн © (2015-04-04 02:35) [17]
> Дмитрий (02.04.15 18:30) [13]
>
> Причем тут "слабо".
> Вы разве нашли у меня реальные запросы для сравнения?
А разве что-то говорил о "реальных запросах для сравнения"?
Тебе предложили попробовать самому " оценить план запроса и написать простейший скрипт, оценивающий скорость выполнения".
← →
Труп Васи Доброго © (2015-04-23 15:10) [18]А SP не спасёт отца русской демократии? Или в mySQL нет SP?
← →
имя (2015-10-20 19:41) [19]Удалено модератором
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2017.08.20;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.001 c