Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Сумма значений полей уникальных записей / 9 сообщений из 9, страница 1 из 1
06.06.2007, 15:07
    #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
06.06.2007, 15:10
    #34577999
Semen Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма значений полей уникальных записей
Semen Popovв которой записи по TRNID могут повторяться.
Извините. Записи по F1 могут повторяться.
...
Рейтинг: 0 / 0
06.06.2007, 15:24
    #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
06.06.2007, 16:02
    #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
06.06.2007, 16:24
    #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
06.06.2007, 16:33
    #34578412
Semen Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма значений полей уникальных записей
Премного благодарен
...
Рейтинг: 0 / 0
07.06.2007, 11:27
    #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
07.06.2007, 11:40
    #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
07.06.2007, 11:47
    #34580443
Semen Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма значений полей уникальных записей
Mark Barinstein
Фразу
"IN a"
заменить на
"IN (SELECT TRNID FROM a)"

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


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