powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вычесть в запросе из агрегата
13 сообщений из 13, страница 1 из 1
Вычесть в запросе из агрегата
    #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
Вычесть в запросе из агрегата
    #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
Вычесть в запросе из агрегата
    #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
Вычесть в запросе из агрегата
    #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
Вычесть в запросе из агрегата
    #38405901
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисВ стартовом посте сумма по B.Y не считалась.
Любой ХШ сразу скажет, что это очередной чудак, разделивший приходы и расходы по разным
таблицам, а теперь не знающий что с этим делать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вычесть в запросе из агрегата
    #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
Вычесть в запросе из агрегата
    #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
Вычесть в запросе из агрегата
    #38405913
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисне тут что-то более хитрое
Действительно. Но по-любому, даже если автор перехитрил себя и привёл тут кривой пример,
ему может помочь тот же union all в derived table, как и остальным.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вычесть в запросе из агрегата
    #38406001
Вопрос2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисне тут что-то более хитроеДа, здесь одни только расходы, из суммы которых нужно вычесть поправку в виде значений из таблицы B. Агрегаты второй таблицы сделал только для того, чтобы под group by убрать можно было.
Dimitry Sibiryakovему может помочь тот же union all в derived table, как и остальным.Не разбирался я пока с DT, посему сделаю с фиктивными sum.
...
Рейтинг: 0 / 0
Вычесть в запросе из агрегата
    #38406029
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос2,

У тебя что А и В никак не связаны?
...
Рейтинг: 0 / 0
Вычесть в запросе из агрегата
    #38406040
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
Вычесть в запросе из агрегата
    #38406051
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос2,

и ещё

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

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


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