Форум: "Базы";
Текущий архив: 2007.02.04;
Скачать: [xml.tar.bz2];
ВнизИспользование Group by с полями типа BLOB Найти похожие ветки
← →
Leshiy © (2006-11-14 15:59) [0]Здравствуйте.
Есть запрос:Select
O.OrdNo,
O.Ord_Comment,
sum ( W.wn_amount ) WCount
from
Orders O
left join Windows W on (W.OrderID=O.OrderID)
where
O.OrderID=...
Group by 1,2
Он не работает т.к. поле Ord_Comment имеет тип Blob.
Преобразовать в строку его тоже нельзя.
Вариант:Select
O.OrdNo,
O.Ord_Comment,
(select sum(w.wn_amount) from Windows W where w.Orderid=O.OrderId) WCount
from
Orders O
where
O.OrderID=...
не всегда удобен на более сложных запросах
Как быть?
← →
Сергей М. © (2006-11-14 16:15) [1]UDF
← →
Sergey13 © (2006-11-14 16:24) [2]> не всегда удобен на более сложных запросах
А кому щас легко? А как ты предполагаешь группировать по БЛОБ-у?
← →
sniknik © (2006-11-14 16:53) [3]> А как ты предполагаешь группировать по БЛОБ-у?
а сортировать? ;) (кстати сортировка предваряет группировку (без этого она просто не делается))
Leshiy
смысл это делать, зачем? ну ну по первым 20 (максимум 100) символам это я еще понимаю, но по гигабайтным массивам информации...??? ну какоя кому разница, что там в 1000000001-ом символе (пример), в одном блобе стоит "а", а во втором "о"? и что страшного случится если порядок этих двух записей будет "неправильным"? до этого места все одно никто не дочитает.
если же там нет больших обьемов, и весь твой комментарий укладывается к примеру в 1000 символов то не проще сделать такое строковое поле (VarChar())?
← →
clickmaker © (2006-11-14 16:55) [4]
> А как ты предполагаешь группировать по БЛОБ-у?
по степени художественной ценности текста, может?
← →
Jeer © (2006-11-14 16:58) [5]clickmaker © (14.11.06 16:55) [4]
Использовать объектную СУБД - они могут по контексту с предварительной экспертизой:)
← →
Leshiy © (2006-11-14 18:59) [6]Sergey13 © (14.11.06 16:24) [2]
sniknik © (14.11.06 16:53) [3]
По БЛОБУ мне сортировка совсем не нужна, даже более того группировка в подобных запросах не нужна, но этого требуют агрегатные функции.
← →
DrPass © (2006-11-14 20:51) [7]
> По БЛОБУ мне сортировка совсем не нужна, даже более того
> группировка в подобных запросах не нужна, но этого требуют
> агрегатные функции.
Если не нужна, то что тогда БЛОБ делает в агрегатной функции? Убери его из запроса
← →
Leshiy © (2006-11-15 06:19) [8]DrPass © (14.11.06 20:51) [7]
Но мне нужно содержимое этого поля.
← →
ЮЮ © (2006-11-15 07:21) [9]Тогда только вариант 2 из твоего же вопроса.
Кстати, чем он тебя так не устраивает?
Или переходить на сервер, поддерживающий подзапрос не на уровне полейSelect
O.OrdNo,
O.Ord_Comment,
(select sum(w.wn_amount) from Windows W where w.Orderid=O.OrderId) WCount
from
Orders O
а на уровне таблиц:Select
O.OrdNo,
O.Ord_Comment,
W.WCount
from
Orders O
left join (select Orderid, sum(wn_amount) from Windows group by OrderId) W ON W.OrderID=O.OrderID
← →
Leshiy © (2006-11-15 07:48) [10]ЮЮ © (15.11.06 07:21) [9]
Варианты с переходам на другой сервер, а так-же заменой blob на varchar большого размера не подходят. т.к. работа ведется с готовым продуктом.
Кстати, чем он тебя так не устраивает?
В некоторых случаях приходится дублировать условия в запросе и подзапросах.
Глаз режет.
Может забить?
← →
ЮЮ © (2006-11-15 08:55) [11]
> В некоторых случаях приходится дублировать условия в запросе
> и подзапросах.
Странно, ведь это по сути подзапрос к Detail - таблице, как там могут появитьяся условия для мастер-таблицы
← →
Johnmen © (2006-11-15 09:43) [12]
> Leshiy © (15.11.06 06:19) [8]
> Но мне нужно содержимое этого поля.
Оно одинаковое для всех записей одной группы?
Для записей разных групп оно разное?
← →
ЮЮ © (2006-11-15 10:13) [13]Оно свое на каждую запись Orders, но соединяя её с другой таблицей Windows {не поминай всуе имя его :)} (0..N), по полям которой и нужна сумма, он, естественно, получает его несколько раз
← →
PEAKTOP © (2006-11-15 13:05) [14]> ЮЮ © (15.11.06 10:13) [13]
> Оно свое на каждую запись Orders, но соединяя её с другой таблицей Windows
"ОПТИМУ" Альтековскую ковыряем ?
← →
sniknik © (2006-11-15 13:13) [15]кстати, а есть в FB
Select
O.OrdNo,
First(O.Ord_Comment) Ord_Comment,
sum ( W.wn_amount ) WCount
from
Orders O
left join Windows W on (W.OrderID=O.OrderID)
where
O.OrderID=...
Group by O.OrdNo
это??? или аналогичное. (думаю понятно что функция делает ;)
← →
Anatoly Podgoretsky © (2006-11-15 13:19) [16]> sniknik (15.11.2006 13:13:15) [15]
Если и нет, то наверно есть Substring
← →
sniknik © (2006-11-15 14:02) [17]> то наверно есть Substring
нет, Substring не пойдет, ему же не нужна сортировка/группировка по этому полу (как выяснилось) а нужно просто его присутствие в общем сгруппированном запросе (почемуто считает что проще указать его в группировке. и судя по тому что ожидается тот же результат то оно весде с одним OrdNo одинаково)...
видно не понятно. First не строковая функция, это агрегатная такая же как Min/Max/Avg/Sum/... только она ничего не вычисляет, просто подставляет первое значение из выбранного подмножества в сгруппированном.
есть в Access (Jet).
а то с чем можно было спутать First для строк, это Left, и у нее 2 параметра, второй длинна слева.
← →
Leshiy © (2006-11-15 14:05) [18]ЮЮ © (15.11.06 08:55) [11]
Если хочешь могу пример привести.
Johnmen © (15.11.06 09:43) [12]
Одно т.к. групп, по сути, нету.
PEAKTOP © (15.11.06 13:05) [14]
Ее самую.
sniknik © (15.11.06 13:13) [15]
Не знает он такую функцию.
Anatoly Podgoretsky © (15.11.06 13:19) [16]
SubString не поможет, т.к. blob низя преобразовывать в varchar.
← →
sniknik © (2006-11-15 14:11) [19]> Не знает он такую функцию.
а какие знает? может "проглотит" другую, тот же Min() например?
← →
Leshiy © (2006-11-15 14:16) [20]sniknik © (15.11.06 14:11) [19]
Агрегатные функции тоже применять низя, никакие (благим матом ругается).
← →
Johnmen © (2006-11-15 14:26) [21]
> Leshiy © (15.11.06 14:05) [18]
> Одно т.к. групп, по сути, нету.
Т.е. значение для всех записей одинаково???
И ещё: БЛОБ значение какой записи нужно?
← →
Anatoly Podgoretsky © (2006-11-15 14:35) [22]> sniknik (15.11.2006 14:02:17) [17]
Понял, насчет First
← →
Anatoly Podgoretsky © (2006-11-15 14:35) [23]> Leshiy (15.11.2006 14:05:18) [18]
> blob низя преобразовывать в varchar.
Спасибо, что предупредил, пойду программу переписывать.
← →
Anatoly Podgoretsky © (2006-11-15 14:37) [24]> Johnmen (15.11.2006 14:26:21) [21]
Я бы тоже посоветовал заменить на "abc"
← →
Leshiy © (2006-11-15 14:38) [25]Johnmen © (15.11.06 14:26) [21]
Т.е. значение для всех записей одинаково???
Нет, для каждой записи из основной таблицы оно свое.
Но в выборке повторяющихся записей нет.
← →
Leshiy © (2006-11-15 14:41) [26]Anatoly Podgoretsky © (15.11.06 14:35) [23]
http://www.interbase-world.com/ru/interbase/doc/detail.php?ID=2713Замечание. Вы не можете преобразовывать данные BLOB или массив в другие типы данных, не можете преобразовывать другие типы данных в массив и BLOB. Тем не менее, индивидуальные элементы массива ведут себя как данные базового типа данных массива.
Как это понимать?
← →
sniknik © (2006-11-15 14:50) [27]> Но в выборке повторяющихся записей нет.
зачем тогда вообще группировка? если повторений нет, то просто убери ее (а сумма то одному значению это то самое значение и будет...).
для группировки обязательны повторения в значениях группируемых полей, иначе она смысла не имеет.
← →
Leshiy © (2006-11-15 15:04) [28]sniknik © (15.11.06 14:50) [27]
Я не прав, дубли есть т.к. связь один ко многим.
← →
Johnmen © (2006-11-15 15:07) [29]
> Leshiy ©
Последний вопрос: поле OrdNo уникально?
Думаю, что да. Не может быть по жизни два заказа с одинаковым номером. Тогда sniknik © (15.11.06 14:50) [27] +SELECT
O.OrdNo,
O.Ord_Comment,
(SELECT sum ( W.wn_amount ) WCount FROM Windows W WHERE (W.OrderID=O.OrderID))
from
Orders O
where
O.OrderID=...
← →
sniknik © (2006-11-15 15:12) [30]Johnmen © (15.11.06 15:07) [29]
;о))
а эта форма "не всегда удобна на более сложных запросах", см. [0]...
← →
Leshiy © (2006-11-15 15:13) [31]В итоге пришли к тому с чего начали... :)
← →
Johnmen © (2006-11-15 15:37) [32]
> sniknik © (15.11.06 15:12) [30]
> Johnmen © (15.11.06 15:07) [29];о))а эта форма "не всегда
> удобна на более сложных запросах", см. [0]..
> Leshiy © (15.11.06 15:13) [31]
> В итоге пришли к тому с чего начали... :)
Во как! Я даже нить обсуждения потерял :)))
← →
PEAKTOP © (2006-11-15 18:05) [33]
> Leshiy © (15.11.06 14:05) [18]
>
> PEAKTOP © (15.11.06 13:05) [14]
> Ее самую.
>
Ты из разработчиков будешь, или прикручиваешь к ней чего ? А то есть предложения.
Давай в ICQ ?
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2007.02.04;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.048 c