powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Суммирование таблиц - задачка по SQL
39 сообщений из 39, показаны все 2 страниц
Суммирование таблиц - задачка по SQL
    #33100851
vybegallo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вниманию SQL-гуру предлагается недавно встретившаяся в жизни задачка.
Дано 2 таблицы
create table t1 (col1 int, col2 int, primary key col1);
create table t2 (col1 int, col2 int, primary key col1);

insert into t1 (1, 1);
insert into t1 (1, 2);
insert into t1 (2, 2);

insert into t2 (2, 2);
insert into t2 (3, 1);

Требуется : получить таблицу t3, состоящую из всех встреченных ключей и сумм по этим ключам. Т.е. результат должен быть
col1 sum(col2)
1 3
2 4
3 1


Чем универсальней (в плане СУБД) тем лучше.
Свое решение опубликую позже.
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33100855
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На первый взгляд ничего, кроме GROUP BY по UNION, не требуется. В чем подвох ?
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33100857
Rollo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
еще интересно что за primary key такой если можно несколько одинаковых значений в таблицу t1 внести. какая-то неудачная задачка
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33100861
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rolloчто за primary key такой если можно несколько одинаковых значений в таблицу t1 внести.Угу... Существенное замечание.
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33100906
mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде ChA все уже сказал. Примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
CREATE TABLE #t1 (col1 INT, col2 INT)
CREATE TABLE #t2 (col1 INT, col2 INT)

INSERT INTO #t1 VALUES ( 1 ,  1 )
INSERT INTO #t1 VALUES ( 1 ,  2 )
INSERT INTO #t1 VALUES ( 2 ,  2 )

INSERT INTO #t2 VALUES ( 2 ,  2 )
INSERT INTO #t2 VALUES ( 3 ,  1 )

SELECT Col1, SUM(col2) AS SuMcol2
FROM
(
  SELECT 
   *
  FROM 
    #t1
  UNION ALL
  SELECT 
   *
  FROM 
    #t2
) t
GROUP BY Col1

DROP TABLE #t1
DROP TABLE #t2
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33100990
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Задачка действительно нетрудная. Я бы сказал рутинная.
mir сделал селектом по селекту, но это непринципиально. Если конкретный сервер этого не поддерживает, то всегда можно сделать через временные таблицы.

А в моем варианте буковок больше!
Код: plaintext
1.
2.
3.
select isNull(#t1.col1,#t2.col1), isNull(sum(#t1.col2), 0 )+isNull(sum(#t2.col2), 0 ) 
from #t1 full outer join #t2 on #t1.col1=#t2.col1
group by isNull(#t1.col1,#t2.col1)
=============
Однако по теме форума. Таких одинаковых таблиц в базе быть не должно. Чем они отличаются?

Названием? Если это данные разных операций, то лучше ввести еще одно поле - признак операции

table t (
Operation int,
col1 int,
col2 int
)
==================
Уважаемы господа! Время от времени у всех нас получаются интересные запросы.
Может быть стоит завести топик - "Золотая коллекция запросов"? Не задачки задавать, а просто делится опытом. У меня сечас как-раз есть один забавный SELECT.
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33101692
vybegallo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
select from (select..) не понимает уйма баз. И хотелось бы обойтись без временных таблиц. Anyone ?

PS: В условии неточность - конечно,col1 не primary key и даже не unique.
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33101756
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vybegalloselect from (select..) не понимает уйма баз. И хотелось бы обойтись без временных таблиц. Anyone ?Баз = СУБД ? Так view-то на UNION ALL что мешает сделать, это-то практически все СУБД понимают ? А потом выборка из него с группировкой, полагаю, что это самый практичный вариант. Наверняка, вариант, который Вы можете предложить, будет намного дороже в смысле выполнения сервером.
Можно такой вариант
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT col1, SUM(col2) + (SELECT SUM(t2.col2) FROM t2 WHERE t2.col1 = t1.col1)
FROM t1
GROUP BY col1
UNION
SELECT col1, SUM(col2) + (SELECT SUM(t1.col2) FROM t1 WHERE t1.col1 = t2.col1)
FROM t2
GROUP BY col1
Или есть СУБД, которые не знают UNION ?

P.S. Чесслово, суть вопроса понятней не стала, точнее даже, смысл универсальности. Наверняка, за счет вопиющей неоптимальности...
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33101792
vybegallo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ChA vybegalloselect from (select..) не понимает уйма баз. И хотелось бы обойтись без временных таблиц. Anyone ?Баз = СУБД ? Так view-то на UNION ALL что мешает сделать, это-то практически все СУБД понимают ? А потом выборка из него с группировкой, полагаю, что это самый практичный вариант. Наверняка, вариант, который Вы можете предложить, будет намного дороже в смысле выполнения сервером.
Можно такой вариант
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT col1, SUM(col2) + (SELECT SUM(t2.col2) FROM t2 WHERE t2.col1 = t1.col1)
FROM t1
GROUP BY col1
UNION
SELECT col1, SUM(col2) + (SELECT SUM(t1.col2) FROM t1 WHERE t1.col1 = t2.col1)
FROM t2
GROUP BY col1
Или есть СУБД, которые не знают UNION ?

P.S. Чесслово, суть вопроса понятней не стала, точнее даже, смысл универсальности. Наверняка, за счет вопиющей неоптимальности...

1> SELECT col1, SUM(col2) + (SELECT SUM(t2.col2) FROM t2 WHERE t2.col1 = t1.col1)
FROM t1
2> 3> ;
Msg 21, Level 14, State 0:
ASA Error -1005004: Subqueries are allowed only as arguments of comparisons, IN,
and EXISTS Subquery SELECT/UNION at line: 1,
-- (df_Heap.cxx 4753)

Sybase IQ er 12.5

Try again...
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33101794
vybegallo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати, я бы поострегся делать выводы об оптимальности-неоптимальности запросов без привязки к конкретной СУБД.
Например, нынче я работаю с такой экзотической вещью как Sybase IQ, которая хранит таблицы по столбцам. В результате чего все понятия об оптимизации становятся с ног на голову. К примеру, приходится избавляться от view вида SELECT * ..., потому что цена выборки зависит от числа столбцов в результате.
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33101976
mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vybegalloКстати, я бы поострегся делать выводы об оптимальности-неоптимальности запросов без привязки к конкретной СУБД.
Например, нынче я работаю с такой экзотической вещью как Sybase IQ, которая хранит таблицы по столбцам. В результате чего все понятия об оптимизации становятся с ног на голову. К примеру, приходится избавляться от view вида SELECT * ..., потому что цена выборки зависит от числа столбцов в результате.Тоже кстати... Тот факт, что СУБД хранит таблицы по столбцам, вовсе не обязательно влечет какую-то особенную зависимость цены выборки от числа столбцов в результате.
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33102076
Фотография daw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
select isnull(#t1.col1, #t2.col1), isnull(sum(#t1.col2),  0 ) + isnull(sum(#t2.col2),  0 )
from #t1
  full outer join #t2 on
     1  =  0 
group by isnull(#t1.col1, #t2.col1)
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33102308
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторMsg 21, Level 14, State 0:
ASA Error -1005004: Subqueries are allowed only as arguments of comparisons, IN,
and EXISTS Subquery SELECT/UNION at line: 1,
-- (df_Heap.cxx 4753)

ASA отлично справится с запросом, предложенным mir
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33102576
mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 daw
Респект. Я сходу до этого не допер.
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33102632
?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
?
Гость
vybegalloPRIMARY KEY(col1, col2) ?
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33103660
vybegallo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
daw
Код: plaintext
1.
2.
3.
4.
select isnull(#t1.col1, #t2.col1), isnull(sum(#t1.col2),  0 ) + isnull(sum(#t2.col2),  0 )
from #t1
  full outer join #t2 on
     1  =  0 
group by isnull(#t1.col1, #t2.col1)


$ ./myisql
1> select isnull(t1.col1, t2.col1), isnull(sum(t1.col2), 0) + isnull(sum(t2.col2), 0)
from t1
full outer join t2 on
1 = 0
group by isnull(t1.col1, t2.col1)
;
isnull(t1.col1,t2.col1) isnull(sum(t1.col2),0)+isnull(
----------------------- ------------------------------

(0 rows affected)

НО если переделать JOIN на
t1.col1 = t2.col1
то все работает :

1> select isnull(t1.col1, t2.col1), isnull(sum(t1.col2), 0) + isnull(sum(t2.col2), 0)
from t1
full outer join t2 on
t1.col1 = t2.col1
group by isnull(t1.col1, t2.col1)
isnull(t1.col1,t2.col1) isnull(sum(t1.col2),0)+isnull(
----------------------- ------------------------------
2 4
1 3
3 1

(3 rows affected)


Ну и по поводу цены выборки в СУБД с постолбцовым расположением данных.
Дано :
таблица из 2 колонок, 1M записей, каждая колонка 100 байт.
Требуется : определить X1 - число прочитанных с диска байт для
случая select col1 from t1
и X2 - для случая select col1, col2 from t1.

Бонус и премия Филдса уходят тому, кто докажет X1 = X2
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33103665
vybegallo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
funikovyuri авторMsg 21, Level 14, State 0:
ASA Error -1005004: Subqueries are allowed only as arguments of comparisons, IN,
and EXISTS Subquery SELECT/UNION at line: 1,
-- (df_Heap.cxx 4753)

ASA отлично справится с запросом, предложенным mir

А IQ ни асилил...
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33103738
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vybegalloКстати, я бы поострегся делать выводы об оптимальности-неоптимальности запросов без привязки к конкретной СУБД.Ваше право, но Вы-то пытаетесь решить единым запросом на большинстве СУБД, а не на одной конкретной. Или Вы уверены, что Ваш запрос будет одинаково оптимален для всех ? С нетерпением ожидаю его опубликования...
vybegalloКакой ответ будет на вопрос ?
Кстати, Ваша модификация варианта-daw на t1.col1 = t2.col1 фактически приводит его к варианту-Cat2 , что может привести к неправильному ответу при других исходных данных. Надеюсь, понятно при каких ? Тем не менее, вариант-daw вполне рабочий и, с теоретической точки зрения, абсолютно верный для всех СУБД, правильно понимающих FULL JOIN, но MySQL(?) просто неправильно его обрабатывает. Т.е., надо еще учитывать, что некоторые СУБД могут не только не понимать синтаксис запроса, но и просто неверно его выполнять ? :)

P.S. daw, прекрасный вариант ! К сожалению, исключил для себя FULL JOIN, так как точно встречался с СУБД, который просто не знали что это такое :) Например, Informix 7.xx. Кстати, он же не понимал и подзапросов в пункте FROM(вариант-mir)...
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33103755
vybegallo03
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ok, мой вариант (при замене case на isnull сводится к уже описанному) :
select
case when t1.col1 is null then t2.col1 else t1.col1 end col1,
sum (case when col2 is null then t2.col2
when t2.col2 is null then col2
else col2 + t2.col2 end) col2,
from t1 full outer join t2 on(t1.col1 = t2.col1)
group by case when t1.col1 is null then t2.col1 else t1.col1 end;

Так на каких данных он будет давать неправильные результаты ?

А насчет оптимальности - как только вы предложите запрос с Union, понимаемый Sybase IQ 12.5 - так сразу я его протестирую и выложу результаты и даже планы выполнения.
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33103788
mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vybegalloНу и по поводу цены выборки в СУБД с постолбцовым расположением данных.
Дано :
таблица из 2 колонок, 1M записей, каждая колонка 100 байт.
Требуется : определить X1 - число прочитанных с диска байт для
случая select col1 from t1
и X2 - для случая select col1, col2 from t1.
Бонус и премия Филдса уходят тому, кто докажет X1 = X2А при чем здесь постолбцовое хранение? Или вы считаете, что для построчного хранения X1 = X2?
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33103975
Фотография daw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vybegallo03
Так на каких данных он будет давать неправильные результаты ?


ну, например:
Код: plaintext
1.
2.
3.
4.
5.
6.
insert into t1 ( 1 ,  1 );
insert into t1 ( 1 ,  2 );
insert into t1 ( 2 ,  2 );

insert into t2 ( 2 ,  2 );
insert into t2 ( 2 ,  3 );
insert into t2 ( 3 ,  1 );
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33104634
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vybegallo03Так на каких данных он будет давать неправильные результаты ?Это же очевидно, см. пример daw...

vybegallo03А насчет оптимальности - как только вы предложите запрос с Union, понимаемый Sybase IQ 12.5 - так сразу я его протестирую и выложу результаты и даже планы выполнения.Простите, но Вы невнимательны ChAВы-то пытаетесь решить единым запросом на большинстве СУБД, а не на одной конкретной. При чем здесь оптимальность только для Sybase IQ 12.5 ? Для другого сервера он может оказатся неоптимальным, или, по крайней мере, вариант с UNION ALL и GROUP BY может оказатся на них более оптимальным. Вам был предложен вариант, который выполнялся бы практически на всех вменяемых СУБД и с высокой степенью оптимальности. Это view на UNION ALL и группировка по нему.

P.S.Тоже имею слабость решать некоторые задачи одним универсальным запросом, но всегда отдаю себе отчет, что оптимальность при этом может сильно пострадать...
P.P.S. А на вопрос в очередной раз так и не ответили...
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33106009
vybegallo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mir vybegalloНу и по поводу цены выборки в СУБД с постолбцовым расположением данных.
Дано :
таблица из 2 колонок, 1M записей, каждая колонка 100 байт.
Требуется : определить X1 - число прочитанных с диска байт для
случая select col1 from t1
и X2 - для случая select col1, col2 from t1.
Бонус и премия Филдса уходят тому, кто докажет X1 = X2А при чем здесь постолбцовое хранение? Или вы считаете, что для построчного хранения X1 = X2?

Представьте себе - да.
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33106017
vybegallo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ChA vybegallo03Так на каких данных он будет давать неправильные результаты ?Это же очевидно, см. пример daw...

vybegallo03А насчет оптимальности - как только вы предложите запрос с Union, понимаемый Sybase IQ 12.5 - так сразу я его протестирую и выложу результаты и даже планы выполнения.Простите, но Вы невнимательны ChAВы-то пытаетесь решить единым запросом на большинстве СУБД, а не на одной конкретной. При чем здесь оптимальность только для Sybase IQ 12.5 ? Для другого сервера он может оказатся неоптимальным, или, по крайней мере, вариант с UNION ALL и GROUP BY может оказатся на них более оптимальным. Вам был предложен вариант, который выполнялся бы практически на всех вменяемых СУБД и с высокой степенью оптимальности. Это view на UNION ALL и группировка по нему.

P.S.Тоже имею слабость решать некоторые задачи одним универсальным запросом, но всегда отдаю себе отчет, что оптимальность при этом может сильно пострадать...
P.P.S. А на вопрос в очередной раз так и не ответили...

Прежде чем обсуждать оптимальность, желательно написать запрос, не выдающий синтаксических ошибок.
Ну такая уж у меня попалась невменяемая СУБД, что select from (select) не понимает. Не она одна такая непонятливая, кстати - и Informix 7, и DB2 7.1 (насчет 8 не помню) тоже не понимают таких вариантов.
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33106019
vybegallo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А что за вопрос-то ? Нету там PK, ни col1, ни col, col2.
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33106033
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ChA. Если СУБД не поддерживает FULL OUTER JOIN, то уж where ... *=* ... должна поддерживать?

Хотя, конечно, UNION ALL в этой задаче - единственно верное решение. А что лучше по VIEW, или по TEMPTABLE - зависит от конкретной СУБД.
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33106041
vybegallo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если СУБД не поддерживает full outer join, то это не потому, что разработчики не смогли договориться о синтаксисе. А потому, что не разработали такую фичу. Поэтому врядли оракловский синтаксис *=* спасет пользователей Informix 7.

К сожалению, Sybase IQ почему-то не понимает и Outer join on (1=0). так что дополненная и исправленная версия selecta будет (при условии что col1 положительно, что с ключами как правило и бывает)
select isnull (t1.col1,t2.col1) col1,
sum(isnull (t1.col2, t2.col2)) col2
from t1 full outer join t2 on(t1.col1 = -t2.col1)
group by isnull (t1.col1,t2.col1)
;
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33106051
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
vybegallo
Прежде чем начинать раздачу призов и бонусов и требовать от других отсутствия синтаксических ошибок, желательно научится правильно формулировать задачу.
Если Вы решили задать свой вопрос в Проектировании, а не на специализированном форуме, то принимайте ответы как есть. Кстати. Ваш вариант с CASE выдаст синтаксическую ошибку на СУБД, которые поддерживают только ANSI-SQL.

Да и Ваш детский восторг в заглавном постинге по поводу решения элементарной задачи просто смешон.
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33106053
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
vybegallo. *=* НЕ оракловский синтаксис. Вы бы почитали что-нибудь по SQL.
MS SQL 6.5 поддерживал =, *=,=*,*=*, но не поддерживал никаких JOIN вообще.
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33106077
vybegallo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cat2vybegallo
Прежде чем начинать раздачу призов и бонусов и требовать от других отсутствия синтаксических ошибок, желательно научится правильно формулировать задачу.
Если Вы решили задать свой вопрос в Проектировании, а не на специализированном форуме, то принимайте ответы как есть. Кстати. Ваш вариант с CASE выдаст синтаксическую ошибку на СУБД, которые поддерживают только ANSI-SQL.

Да и Ваш детский восторг в заглавном постинге по поводу решения элементарной задачи просто смешон.

Какую часть предложения "Чем универсальней (в плане СУБД) тем лучше" вы не понимаете ? И какая из реальных СУБД (Oracle, MS SQL, Informix, DB2, Sybase, Mysql ) не понимает "case" ?
Ну и увидеть "детский восторг" в начальном постинге - это хорошая, качественная трава.
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33106144
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vybegalloПрежде чем обсуждать оптимальность, желательно написать запрос, не выдающий синтаксических ошибок.Если это претензия ко мне, то извините, что предложенный вариант не поняла IQ, с точки зрения ANSI вариант был синтаксически правильный. А еще IQ... :)
Кстати, вариант все равно был с червоточинкой, приблизительно на подобных же данных, что и Ваш.
vybegalloНу такая уж у меня попалась невменяемая СУБД, что select from (select) не понимает. Не она одна такая непонятливая, кстати - и Informix 7, и DB2 7.1 (насчет 8 не помню) тоже не понимают таких вариантов.Ну так CREATE VIEW они поддерживают ? Про select from (select) вообще речи нет, что Вы на этом варианте-то зациклились... vybegalloК сожалению, Sybase IQ почему-то не понимает и Outer join on (1=0). так что дополненная и исправленная версия selecta будет (при условии что col1 положительно, что с ключами как правило и бывает)Тупой он какой-то, этот IQ :) Тогда уж так
Код: plaintext
1.
2.
3.
select isnull (t1.col1,t2.col1) col1,
sum(isnull (t1.col2, t2.col2)) col2
from t1 full outer join t2 on (t1.col1 = -t1.col1 AND t1.col1 <>  0 )
group by isnull (t1.col1,t2.col1)
Это все-таки не зависит от исходных данных. Только не говорите, что он и этот вариант не переварит :) Кстати, на практике обычно применяю ключи с отрицательного минимума, так что Ваше допущение о положительных ключах на ранг правила претендовать не может.
Cat2Спокойно :) Не надо шума, а вот обещанный любопытный SELECT так и не был представлен широкой публике. Или действительно лучше создать новый топик ? Хотя есть подозрения, что перлы будут завалены массой флуда...

P.S. Кстати, сталкивался с заменой UNION на FULL JOIN и наоборот, даже показалось, что это возможно всегда, пока не столкнулся с ситуацией, где эквивалентная замена оказалась невозможной.
P.P.S. И все-таки сложно представить СУБД, где реализация FULL JOIN оптимальнее UNION...
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33106175
vybegallo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ChA
Тупой он какой-то, этот IQ :) Тогда уж так
Код: plaintext
1.
2.
3.
select isnull (t1.col1,t2.col1) col1,
sum(isnull (t1.col2, t2.col2)) col2
from t1 full outer join t2 on (t1.col1 = -t1.col1 AND t1.col1 <>  0 )
group by isnull (t1.col1,t2.col1)
Это все-таки не зависит от исходных данных. Только не говорите, что он и этот вариант не переварит :)

"Папа, ви будете смеяться, но ваша дочь опять умерла !" (С)

isnull (t1.col1,t2.col1) col1,
sum(isnull (t1.col2, t2.col2)) col2
from t1 full outer join t2 on(t1.col1 = -t1.col1 and t1.col1 = 0)
group by isnull (t1.col1,t2.col1)
;
col1 col2
----------- ----------------------------

(0 rows affected)

ChA
P.S. Кстати, сталкивался с заменой UNION на FULL JOIN и наоборот, даже показалось, что это возможно всегда, пока не столкнулся с ситуацией, где эквивалентная замена оказалась невозможной.

Пример ?

ChAP.P.S. И все-таки сложно представить СУБД, где реализация FULL JOIN оптимальнее UNION...

Имейте терпение, Штубинг - скоро дойдет дело и до планов ...
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33106193
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vybegallo"Папа, ви будете смеяться, но ваша дочь опять умерла !" (С)
...
(0 rows affected)Нда, это уже диагноз. Как-то своеобразно IQ понимает FULL JOIN или у него оптимизатор больной... Хорошо, а так
Код: plaintext
1.
2.
3.
select isnull (t1.col1,t2.col1) col1,
sum(isnull (t1.col2, t2.col2)) col2
from t1 full outer join t2 on (t1.col1 = t1.col1 +  1 )
group by isnull (t1.col1,t2.col1)
? Хрен c ним, с переполнением на максимуме...
vybegalloПример ?Давно было, года два-три назад, сейчас даже и не припомню, если только случайно...
vybegalloдойдет дело и до планов...Да какие уж тут планы :) И вообще, здесь, скорее, уже статистика, ЦПУ, сканы, риды и прочая мутотень...
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33110581
vybegallo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ChA vybegallo"Папа, ви будете смеяться, но ваша дочь опять умерла !" (С)
...
(0 rows affected)Нда, это уже диагноз. Как-то своеобразно IQ понимает FULL JOIN или у него оптимизатор больной... Хорошо, а так
Код: plaintext
1.
2.
3.
select isnull (t1.col1,t2.col1) col1,
sum(isnull (t1.col2, t2.col2)) col2
from t1 full outer join t2 on (t1.col1 = t1.col1 +  1 )
group by isnull (t1.col1,t2.col1)
? Хрен c ним, с переполнением на максимуме...
vybegalloПример ?Давно было, года два-три назад, сейчас даже и не припомню, если только случайно...
vybegalloдойдет дело и до планов...Да какие уж тут планы :) И вообще, здесь, скорее, уже статистика, ЦПУ, сканы, риды и прочая мутотень...

Ну, как и ожидалось, вариант t1.col1=t1.col1+1 тоже не сработал. Я думаю, оно в условии Join понимает только столбцы и только соединяемых таблиц. Вдобавок пришлось от ключа bigint перейти к ключу char(32) и вариант с минусом тоже на прокатил. Перешел на view.
Вообще, этот Sybase IQ - забавная штука. На сложных запросах, говорят, летает как реактивный, при достаточно примитивном не cost-based оптимизаторе. Падает в среднем раз в день. Книги отсутствуют как класс. Внутренняя структура страниц и индексов нигде не описана. Сертификатов не выдают :-). Индексов штук 6, и можно строить несколько индексов разных типоов на одной колонке. Данные хранит сразу проиндексированными и в упакованном виде, обещают что даже при всех построенных индексах занимаемое место на диске за счет упаковки не превышает размера чистых данных. В общем, сплошная экзотика :-)
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33110679
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vybegalloВ общем, сплошная экзотикаМожет в морг ?
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33110727
vybegallo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну, зачем же сразу в морг. Если оно запрос выполняет за 2 часа, на который DB2 потратило 2 дня - то можно и потерпеть...
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33110746
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vybegalloЕсли оно запрос выполняет за 2 часа, на который DB2 потратило 2 дня - то можно и потерпеть...Сугубая заточка под OLAP ?
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33110781
vybegallo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да. Вплоть до монопольного доступа на запись к таблице. Звездообразная схема поддерживается автоматически - указываешь для столбца число возможных значений (cardinality) и после чего хоть char(300) его описывай - хранить будет только 1-2-4 байта.
...
Рейтинг: 0 / 0
Суммирование таблиц - задачка по SQL
    #33112879
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
vybegallo. Уже не понимаю смысла топика. Есть проблемы - в соответсвующий форум. Но скорее тут попытка показать свою крутизну, которой на самом деле не оказалось. Мы так и не увидели Вашего супер-пупер решения задачи для всех sql-серверов и народов. Если я его не увижу в течении суток, то топик будет закрыт.
...
Рейтинг: 0 / 0
39 сообщений из 39, показаны все 2 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Суммирование таблиц - задачка по SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]