Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Как правильно посчитать записи?  [new]
самбади
Guest
Доброго дня.
Пытаюсь посчитать следующее:
...
     count(case when dv between '01.07.2009' and '01.08.2009'
                         and per_znach = '5'
                         then 1 end)
     from (select i.*, j.dv, k.per_znach from t_os i, t_dv j, t_per k 
                  where i.id = j.t_os and i.id = k.t_os)

по связке i.id = j.t_os - 3 записи, по связке i.id = k.t_os - 4 записи, стало быть в результате подсчета 4, хотя желаемый результат 3, как его достигнуть?
7 авг 09, 16:49    [7512201]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно посчитать записи?  [new]
Wadim S
Member

Откуда: Ukraine
Сообщений: 178
самбади
Доброго дня.
Пытаюсь посчитать следующее:
...
     count(case when dv between '01.07.2009' and '01.08.2009'
                         and per_znach = '5'
                         then 1 end)
     from (select i.*, j.dv, k.per_znach from t_os i, t_dv j, t_per k 
                  where i.id = j.t_os and i.id = k.t_os)

по связке i.id = j.t_os - 3 записи, по связке i.id = k.t_os - 4 записи, стало быть в результате подсчета 4, хотя желаемый результат 3, как его достигнуть?


вместо count надо sum
7 авг 09, 16:56    [7512263]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно посчитать записи?  [new]
Andrey.L
Member

Откуда: Харьков
Сообщений: 1546
самбади,

COUNT(DISTINCT ...) ?
7 авг 09, 16:56    [7512265]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно посчитать записи?  [new]
самбади
Guest
sum вернет то же самое - 4, DISTINCT возвращает 1...
а еще варианты?
7 авг 09, 17:56    [7512621]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно посчитать записи?  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
самбади,

у j первичный ключ есть? Вот его в COUNT(DISTINCT ...) и ставьте.
7 авг 09, 18:21    [7512744]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно посчитать записи?  [new]
Batsall
Member

Откуда: Москва
Сообщений: 360
самбади,

если я правильно понял условие задачи, то
count( distinct case per_znach when '5' then case when dv between '01.07.2009' and '01.08.2009' then dv end end)
но только скорее всего я ошибаюсь. Выложите ddl таблиц.
7 авг 09, 18:28    [7512780]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно посчитать записи?  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10045
самбади
по связке i.id = j.t_os - 3 записи, по связке i.id = k.t_os - 4 записи, стало быть в результате подсчета 4, хотя желаемый результат 3, как его достигнуть?


??? Go back to basics:

I.IDJ.T_OSK.T_OS
114
114
114
252
252
252
252


Now i.id = j.t_os returns 3 rows, i.id = k.t_os returns 4 rows. And obviously i.id = j.t_os AND i.id = k.t_os returns, as expected, no rows. Bottom line if condition1 returns X rows and condition2 Y rows then condition1 AND condition2 can return between 0 and LEAST(X,Y) rows. In regards to your particular case - 3 i.id where i.id = j.t_os can be completely or partially different i.id where i.id = k.t_os.

SY.
7 авг 09, 23:01    [7513499]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно посчитать записи?  [new]
самбади
Guest
SY,
изначально неточно сформулировал...
условие i.id = j.t_os and i.id = k.t_os and j.t_os = k.t_os и в таблице k некое поле fld:
I.IDJ.T_OSK.T_OSK.PER_ZNACHK.FLD
111511
222512
333513
333514

т.е. из-за k.fld в получаем при подсчете 4 записи, а нужно считать только 3 записи из первой колонки..
10 авг 09, 15:34    [7518144]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно посчитать записи?  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
самбади,

вам сколько раз повторять?
COUNT(DISTINCT ... id)
10 авг 09, 15:42    [7518211]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить