Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
15-1168590761
6548
2007-01-12 11:32
2007.02.04
эмуляция действий


2-1169016602
gio_zh
2007-01-17 09:50
2007.02.04
set


2-1169076569
Альберт
2007-01-18 02:29
2007.02.04
перерисовка с прозрачностью


1-1166023834
kukuikar
2006-12-13 18:30
2007.02.04
Блокировка выключения системы


2-1168787790
novice007
2007-01-14 18:16
2007.02.04
TIdHTTPServer и запись в файл





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский