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

Откуда: Хабаровский край, Ванино
Сообщений: 145
Привет всем, есть запрос, который возвращает уже уникальные строки, можно ли в них(строках) подсчитать количество уникальных значений в нужном столбце. Может можно как-нибудь сделать с помощью аналитических функций

Нужно так:

№ строки Столбец Аналит. фун-ия
1 q 3
2 q 3
3 e 3
4 w 3
6 май 10, 08:15    [8733609]     Ответить | Цитировать Сообщить модератору
 Re: подсчет уникальных записей  [new]
_eldar_
Member

Откуда: Хабаровский край, Ванино
Сообщений: 145
пробелы съело (
6 май 10, 08:16    [8733613]     Ответить | Цитировать Сообщить модератору
 Re: подсчет уникальных записей  [new]
_eldar_
Member

Откуда: Хабаровский край, Ванино
Сообщений: 145
Вот так нужно

№ строки Столбец Аналит. фун-ия
1 --------------q--------------3
2 --------------q--------------3
3 --------------e--------------3
4 --------------w--------------3
6 май 10, 08:19    [8733618]     Ответить | Цитировать Сообщить модератору
 Re: подсчет уникальных записей  [new]
StepanovMD
Member

Откуда: Moscow
Сообщений: 452
select count(distinct My_Field) from table
6 май 10, 08:19    [8733620]     Ответить | Цитировать Сообщить модератору
 Re: подсчет уникальных записей  [new]
_eldar_
Member

Откуда: Хабаровский край, Ванино
Сообщений: 145
StepanovMD нет так не пойдет, я ж говорю селект и так уже уникальные строки возвращает,

результат будет таков

№ строки --Столбец-- count(distinct Столбец)
1 --------------q--------------1
2 --------------q--------------1
3 --------------e--------------1
4 --------------w--------------1
6 май 10, 08:22    [8733623]     Ответить | Цитировать Сообщить модератору
 Re: подсчет уникальных записей  [new]
StepanovMD
Member

Откуда: Moscow
Сообщений: 452
with t as
(select 'q' as MyField from dual union all
select 'q' as MyField from dual union all
select 'e' as MyField from dual union all
select 'w' as MyField from dual )
select t.MyField, count(distinct t.MyField) over() from t 
6 май 10, 08:32    [8733657]     Ответить | Цитировать Сообщить модератору
 Re: подсчет уникальных записей  [new]
_eldar_
Member

Откуда: Хабаровский край, Ванино
Сообщений: 145
спасибо помогло, только не понятно немного, чем отличается count(distint поле) count(distinct поле) over()
6 май 10, 08:39    [8733681]     Ответить | Цитировать Сообщить модератору
 Re: подсчет уникальных записей  [new]
_eldar_
Member

Откуда: Хабаровский край, Ванино
Сообщений: 145
StepanovMD, первый раз встретил такую конструкцию :"with t as.." у меня такой запрос ничего не вернул
6 май 10, 08:43    [8733701]     Ответить | Цитировать Сообщить модератору
 Re: подсчет уникальных записей  [new]
Dragon Luck
Member

Откуда: Н. Новгород
Сообщений: 79
это эмуляция таблицы
with t as
(select 'q' as MyField from dual union all
select 'q' as MyField from dual union all
select 'e' as MyField from dual union all
select 'w' as MyField from dual )

over() признак того что функция аналитическая
6 май 10, 09:12    [8733813]     Ответить | Цитировать Сообщить модератору
 Re: подсчет уникальных записей  [new]
comphead
Member

Откуда: Киев
Сообщений: 3390
StepanovMD
with t as
(select 'q' as MyField from dual union all
select 'q' as MyField from dual union all
select 'e' as MyField from dual union all
select 'w' as MyField from dual )
select t.MyField, count(distinct t.MyField) over() from t 


а чем не устроил

count(1) over (partition by t.MyField)
?
6 май 10, 10:07    [8734165]     Ответить | Цитировать Сообщить модератору
 Re: подсчет уникальных записей  [new]
JaRo
Member

Откуда:
Сообщений: 1659
comphead
StepanovMD
with t as
(select 'q' as MyField from dual union all
select 'q' as MyField from dual union all
select 'e' as MyField from dual union all
select 'w' as MyField from dual )
select t.MyField, count(distinct t.MyField) over() from t 


а чем не устроил

count(1) over (partition by t.MyField)
?
Может тем, что это диаметрально противоположные вещи...
6 май 10, 10:12    [8734193]     Ответить | Цитировать Сообщить модератору
 Re: подсчет уникальных записей  [new]
comphead
Member

Откуда: Киев
Сообщений: 3390
JaRo,

согласен. задницей прочитал задание.
6 май 10, 10:18    [8734250]     Ответить | Цитировать Сообщить модератору
 Re: подсчет уникальных записей  [new]
comphead
Member

Откуда: Киев
Сообщений: 3390
JaRo,

хотя можно и как я сказал. правда сложнее чуть

with t as
(select 'q' as MyField from dual union all
select 'q' as MyField from dual union all
select 'e' as MyField from dual union all
select 'w' as MyField from dual )
select a.*,
       count(case when a.c = 0 then 1 else null end) over ()
from
(
    select t.MyField, 
           count(1) over (partition by myfield) - row_number() over (partition by myfield order by myfield) c
    from t 
) a
6 май 10, 10:24    [8734301]     Ответить | Цитировать Сообщить модератору
 Re: подсчет уникальных записей  [new]
JaRo
Member

Откуда:
Сообщений: 1659
comphead
хотя можно и как я сказал. правда сложнее чуть
Можно и ещё сложнее написать, только смысл сего действия непонятен...

И уж если зачем-то писать тем алгоритмом, что написали Вы, то гораздо проще:
select a.*,
       count(case when a.c = 1 then 1 end) over ()
from
(
    select t.MyField, row_number() over (partition by myfield order by myfield) c
    from t 
) a
6 май 10, 10:51    [8734530]     Ответить | Цитировать Сообщить модератору
 Re: подсчет уникальных записей  [new]
зачем сложности
Guest
автор
можно ли в них(строках) подсчитать количество уникальных значений в нужном столбце
автор
select a.*,
count(case when a.c = 1 then 1 end) over ()
from
(
select t.MyField, row_number() over (partition by myfield order by myfield) c
from t
) a




Если без аналитических функций, то

select count(MyField)          -- или count(*) если нужно учесть значение NULL
    from t 
group by MyField
6 май 10, 15:36    [8736643]     Ответить | Цитировать Сообщить модератору
 Re: подсчет уникальных записей  [new]
comphead
Member

Откуда: Киев
Сообщений: 3390
зачем сложности,

значит, не я один задницей читаю заданию

нужно сохранить строки. а не убирать дубликаты.
6 май 10, 15:38    [8736668]     Ответить | Цитировать Сообщить модератору
 Re: подсчет уникальных записей  [new]
JaRo
Member

Откуда:
Сообщений: 1659
зачем сложности, ИМХО Вы прочитали только последний ответ в ветке... Ответ (правильный) уже давно дан.
6 май 10, 15:38    [8736677]     Ответить | Цитировать Сообщить модератору
 Re: подсчет уникальных записей  [new]
зачем сложности
Guest
comphead,

Вы совершенно правы
6 май 10, 15:42    [8736719]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить