powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Сумма значений полей уникальных записей
9 сообщений из 9, страница 1 из 1
Сумма значений полей уникальных записей
    #34577993
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте всем!
Обстановка: IBM DB2
Есть таблица T1 (F1 INTEGER NOT NULL, F2 REAL NOT NULL), в которой записи по TRNID могут повторяться. Например,
F1 F2
--------------
1 10.00
1 15.00
2 30.00
3 20.00
3 25.00

Нужно построить такой запрос, который бы подсчитывал сумму значений F2 только для уникальных по F1 записей. Если записей по F1 более одной, то суммировать значение F2 только первой из них. Т.е. по примеру должно получиться 10+30+20=60.

Помогите неопытному. А то я уже несколько вариантов испробовал, но запросы какими-то громоздкими получаются.

Спасибо
С уважением, Семен Попов
...
Рейтинг: 0 / 0
Сумма значений полей уникальных записей
    #34577999
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Semen Popovв которой записи по TRNID могут повторяться.
Извините. Записи по F1 могут повторяться.
...
Рейтинг: 0 / 0
Сумма значений полей уникальных записей
    #34578066
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select sum(f2)
from
(
select f2, rownumber() over(partition by f1) rn
from t1
) a
where rn= 1 ;
В данном случае "1-я из них" будет выбираться случайно в общем случае, т.к. в db2 нет понятия "первая" или "последняя" запись.
Но вы можете внутри каждой группы F1 задавать сортировку записей, согласно которой они будут нумероваться.
...
Рейтинг: 0 / 0
Сумма значений полей уникальных записей
    #34578263
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. То, что надо.
А можно ли одним запросом из таблицы T1 (F1 INTEGER NOT NULL, F2 REAL NOT NULL, F3 REAL NOT NULL) вычислить:
1. количество уникальных записей по F1,
2. сумму значений F2 уникальных записей по F1 (это я спрашивал выше),
3. сумму значений F3 всех записей?

Как все в отдельности, я теперь знаю. А можно ли в одном запросе?
...
Рейтинг: 0 / 0
Сумма значений полей уникальных записей
    #34578360
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
with a as
(
select f2, rownumber() over(partition by f1) rn
from t1
)
select *
from table (
values
(
  (select count( 1 ) from (select  1  from t1 group by f1 having count( 1 )= 1 ) b)
, (select sum(f2) from a where rn= 1 )
, (select sum(f3) from t1)
) 
) b (v1, v2, v3)
...
Рейтинг: 0 / 0
Сумма значений полей уникальных записей
    #34578412
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Премного благодарен
...
Рейтинг: 0 / 0
Сумма значений полей уникальных записей
    #34580350
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изобрел запрос на основе Вашего:
Код: plaintext
1.
2.
3.
4.
5.
6.
WITH a AS (SELECT TRNID FROM PENSTRAN.TRANSITS WHERE LAWRSLCOD<> 1  AND PFRRSLCOD IN( 1 , 2 ))
SELECT * FROM TABLE(VALUES(
(SELECT COUNT(*) FROM a),
(SELECT SUM(TICSUM) FROM PENSTRAN.TICKETS WHERE TRNID IN a),
(SELECT SUM(EXPNDLVRY) FROM PENSTRAN.TRANSITS WHERE TRNID IN a)
)) AS b(v1,v2,v3)
Но, он не работает. Что тут не так?
...
Рейтинг: 0 / 0
Сумма значений полей уникальных записей
    #34580411
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Semen PopovИзобрел запрос на основе Вашего:
Код: plaintext
1.
2.
3.
4.
5.
6.
WITH a AS (SELECT TRNID FROM PENSTRAN.TRANSITS WHERE LAWRSLCOD<> 1  AND PFRRSLCOD IN( 1 , 2 ))
SELECT * FROM TABLE(VALUES(
(SELECT COUNT(*) FROM a),
(SELECT SUM(TICSUM) FROM PENSTRAN.TICKETS WHERE TRNID IN a),
(SELECT SUM(EXPNDLVRY) FROM PENSTRAN.TRANSITS WHERE TRNID IN a)
)) AS b(v1,v2,v3)
Но, он не работает. Что тут не так?
Фразу
"IN a"
заменить на
"IN (SELECT TRNID FROM a)"
...
Рейтинг: 0 / 0
Сумма значений полей уникальных записей
    #34580443
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark Barinstein
Фразу
"IN a"
заменить на
"IN (SELECT TRNID FROM a)"

Спасибо. Учиться мне еще и учиться!
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Сумма значений полей уникальных записей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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