Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.04;
Скачать: CL | DM;

Вниз

Использование 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;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.046 c
15-1168634182
ProgRAMmer Dimonych
2007-01-12 23:36
2007.02.04
Подскажите софтинку...


3-1163509197
Leshiy
2006-11-14 15:59
2007.02.04
Использование Group by с полями типа BLOB


15-1168682519
Footballer
2007-01-13 13:01
2007.02.04
Вопрос не по делфи


15-1168607123
DVM
2007-01-12 16:05
2007.02.04
Как вам такой админ. Говорят правда.


4-1158563133
Anatolii
2006-09-18 11:05
2007.02.04
Получить список открытых в системе файлов (WinNT)