Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вычесть в запросе из агрегата / 13 сообщений из 13, страница 1 из 1
24.09.2013, 12:30:49
    #38405834
Вопрос2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычесть в запросе из агрегата
Есть две таблицы A и B со сходной структурой:
Код: sql
1.
2.
create tabe A(ID integer not null primary key, X integer, Y1 integer, Y2 integer, Y3 integer);
create tabe B(ID integer not null primary key, Y1 integer, Y2 integer, Y3 integer);

Нужно собрать сумму значений Y1..Y3 для определенного ID из таблицы A и из этой суммы вычесть соответствующие значения из таблицы B.
Т.е. что-то типа:
Код: sql
1.
select A.ID, sum(A.Y1)-B.Y1...

Понимаю, что можно создать просмотр с суммами и вычитать из него. Возможно ли это в рамках одного запроса (без view, sp, eb, es)?
FB 2.5
...
Рейтинг: 0 / 0
24.09.2013, 12:32:43
    #38405840
Вопрос2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычесть в запросе из агрегата
Родилась идея использовать конструкцию вида
Код: sql
1.
2.
3.
select ID, sum(A.Y1)-sum(B.Y1), ... from A
left join B on A.id=B.id
group by 1

Корректно ли подобное?
...
Рейтинг: 0 / 0
24.09.2013, 12:36:23
    #38405848
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычесть в запросе из агрегата
Вопрос2,

да. с помощью CTE

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
with C as (
  select A.ID as ID, 
           sum(A.Y1) as Y1,
           sum(A.Y1) as Y2,
           sum(A.Y1) as Y3
  from A
  group by 1
)
select C.ID,
         C.Y1-B.Y1 as Y1,
         C.Y2-B.Y2 as Y2,
         C.Y3-B.Y3 as Y3
from C
       join B on A.ID = B.ID
...
Рейтинг: 0 / 0
24.09.2013, 12:39:58
    #38405862
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычесть в запросе из агрегата
Вопрос2Родилась идея использовать конструкцию вида
Код: sql
1.
2.
3.
select ID, sum(A.Y1)-sum(B.Y1), ... from A
left join B on A.id=B.id
group by 1

Корректно ли подобное?

не совсем. ID не надо без имени таблицы указывать. Вас прасер отфутболит.
В стартовом посте сумма по B.Y не считалась.
...
Рейтинг: 0 / 0
24.09.2013, 12:57:47
    #38405901
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычесть в запросе из агрегата
Симонов ДенисВ стартовом посте сумма по B.Y не считалась.
Любой ХШ сразу скажет, что это очередной чудак, разделивший приходы и расходы по разным
таблицам, а теперь не знающий что с этим делать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.09.2013, 13:03:38
    #38405909
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычесть в запросе из агрегата
Dimitry Sibiryakov,

не тут что-то более хитрое

Код: sql
1.
2.
create tabe A(ID integer not null primary key, X integer, Y1 integer, Y2 integer, Y3 integer);
create tabe B(ID integer not null primary key, Y1 integer, Y2 integer, Y3 integer);



во втором посте автор пытается их соединить по ПК. Не думаю что на каждый приход ровно один расход и наоборот.
...
Рейтинг: 0 / 0
24.09.2013, 13:05:43
    #38405912
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычесть в запросе из агрегата
Симонов Денис,

собственно коли так, то

Код: sql
1.
2.
3.
4.
5.
6.
  select A.ID as ID, 
           sum(A.Y1-B.Y1) as Y1,
           sum(A.Y1-B.Y1) as Y2,
           sum(A.Y1-B.Y1) as Y3
  from A join  B on A.ID = B.ID
  group by 1
...
Рейтинг: 0 / 0
24.09.2013, 13:06:31
    #38405913
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычесть в запросе из агрегата
Симонов Денисне тут что-то более хитрое
Действительно. Но по-любому, даже если автор перехитрил себя и привёл тут кривой пример,
ему может помочь тот же union all в derived table, как и остальным.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.09.2013, 13:41:21
    #38406001
Вопрос2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычесть в запросе из агрегата
Симонов Денисне тут что-то более хитроеДа, здесь одни только расходы, из суммы которых нужно вычесть поправку в виде значений из таблицы B. Агрегаты второй таблицы сделал только для того, чтобы под group by убрать можно было.
Dimitry Sibiryakovему может помочь тот же union all в derived table, как и остальным.Не разбирался я пока с DT, посему сделаю с фиктивными sum.
...
Рейтинг: 0 / 0
24.09.2013, 13:52:30
    #38406029
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычесть в запросе из агрегата
Вопрос2,

У тебя что А и В никак не связаны?
...
Рейтинг: 0 / 0
24.09.2013, 13:57:07
    #38406040
m7m
m7m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычесть в запросе из агрегата
Вопрос2Есть две таблицы A и B со сходной структурой:
Код: sql
1.
2.
create tabe A(ID integer not null primary key, X integer, Y1 integer, Y2 integer, Y3 integer);
create tabe B(ID integer not null primary key, Y1 integer, Y2 integer, Y3 integer);

Нужно собрать сумму значений Y1..Y3 для определенного ID из таблицы A и из этой суммы вычесть соответствующие значения из таблицы B.
Т.е. что-то типа:
Код: sql
1.
select A.ID, sum(A.Y1)-B.Y1...

Понимаю, что можно создать просмотр с суммами и вычитать из него. Возможно ли это в рамках одного запроса (без view, sp, eb, es)?
FB 2.5

select from select
...
Рейтинг: 0 / 0
24.09.2013, 14:02:33
    #38406051
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычесть в запросе из агрегата
Вопрос2,

и ещё

Код: sql
1.
select A.ID, sum(A.Y1) ... group by A.ID

не имеет смысла, т.к. у тебя ID первичный ключ, т.е. на каждое значение ID будет всего одно значение Y1
...
Рейтинг: 0 / 0
24.09.2013, 15:04:15
    #38406143
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычесть в запросе из агрегата
Dimitry Sibiryakovему может помочь тот же union all в derived tableпотом поверх group by по требуемым критериям, которые пока не очевидны из вводных.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вычесть в запросе из агрегата / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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