Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Посчитать количества значений  [new]
petrovichvanya
Member

Откуда:
Сообщений: 102
Здравствуйте, подскажите как посчитать количества значений count. Схема для расчета такая, если у нас в longid одинаковые значение значит считаем их все как один, если пуста тогда каждая ячейка = 1, в общей сумме по приложенному скриншоту у нас должно получится count = 3

К сообщению приложен файл. Размер - 30Kb
12 июн 19, 16:54    [21907360]     Ответить | Цитировать Сообщить модератору
 Re: Посчитать количества значений  [new]
dmdmdm
Member

Откуда: Нижний Новгород
Сообщений: 1216
count(distinct LONGID) = 2.

Чтобы получилось 3, надо по какому-то другому столбцу считать.
12 июн 19, 17:08    [21907366]     Ответить | Цитировать Сообщить модератору
 Re: Посчитать количества значений  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1856
petrovichvanya,

SQL> with t (logid,id) as (
  2  select null,8000016 from dual union all
  3  select null,8000016 from dual union all
  4  select 131084,8000016 from dual union all
  5  select 131084,8000016 from dual union all
  6  select 131085,8000016 from dual)
  7  select count(distinct decode(logid,null,rownum,0)) cc from t
  8  /

        CC
----------
         3


....
stax
12 июн 19, 17:18    [21907369]     Ответить | Цитировать Сообщить модератору
 Re: Посчитать количества значений  [new]
dmdmdm
Member

Откуда: Нижний Новгород
Сообщений: 1216
Stax, уже пришла та же мысль, и еще дополнение: во избежание совпадения rownum и реального значения LONGID, написать -rownum.

with t as (
       select null longid, 1 cnt from dual union all
       select null longid, 1 cnt from dual union all
       select 1 longid, 1 cnt from dual union all
       select 2 longid, 1 cnt from dual union all
       select 2 longid, 1 cnt from dual
)
select count(distinct(nvl(longid, -rownum))) from t
12 июн 19, 17:34    [21907380]     Ответить | Цитировать Сообщить модератору
 Re: Посчитать количества значений  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1856
dmdmdm,

  1  with t as (
  2         select null longid, 1 cnt from dual union all
  3         select null longid, 1 cnt from dual union all
  4         select 1 longid, 1 cnt from dual union all
  5         select 2 longid, 1 cnt from dual union all
  6         select 2 longid, 1 cnt from dual
  7  )
  8* select count(distinct(nvl(longid, -rownum))) cc from t
SQL> /

        CC
----------
         4


.....
stax
12 июн 19, 17:43    [21907384]     Ответить | Цитировать Сообщить модератору
 Re: Посчитать количества значений  [new]
petrovichvanya
Member

Откуда:
Сообщений: 102
Спасибо, оба варианта подошли
12 июн 19, 17:46    [21907387]     Ответить | Цитировать Сообщить модератору
 Re: Посчитать количества значений  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6609
Stax
dmdmdm,

  1  with t as (
  2         select null longid, 1 cnt from dual union all
  3         select null longid, 1 cnt from dual union all
  4         select 1 longid, 1 cnt from dual union all
  5         select 2 longid, 1 cnt from dual union all
  6         select 2 longid, 1 cnt from dual
  7  )
  8* select count(distinct(nvl(longid, -rownum))) cc from t
SQL> /

        CC
----------
         4



.....
stax

так 4 правильно 1, 2 и 2 null
12 июн 19, 17:58    [21907396]     Ответить | Цитировать Сообщить модератору
 Re: Посчитать количества значений  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1856
alex-ls
так 4 правильно 1, 2 и 2 null

тогда я неправильно понял задачу
и 21907369 неверное решение

зы
считал все not null за 1

....
stax
12 июн 19, 18:16    [21907406]     Ответить | Цитировать Сообщить модератору
 Re: Посчитать количества значений  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6609
Stax
alex-ls
так 4 правильно 1, 2 и 2 null

тогда я неправильно понял задачу
stax


автор
если у нас в longid одинаковые значение значит считаем их все как один, если пуста тогда каждая ячейка = 1

таки написано, что одинаковые значения longid - за единицу, значит разные значения считаем отдельно, ну и по NULL каждая строка как отдельная единица
13 июн 19, 04:55    [21907552]     Ответить | Цитировать Сообщить модератору
 Re: Посчитать количества значений  [new]
-2-
Member

Откуда:
Сообщений: 14679
count(distinct(nvl(longid, -rownum)))
надежнее и дешевле count null + count distinct.
13 июн 19, 06:46    [21907586]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить