Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Distinct - по сути, с лёгкостью заменяется group by. Тогда зачем он?  [new]
Charles Weyland
Member

Откуда: Feorina "Fury" 161
Сообщений: 4348
Distinct - по сути, с лёгкостью заменяется group by. Тогда зачем он?
27 окт 12, 03:49    [13384296]     Ответить | Цитировать Сообщить модератору
 Re: Distinct - по сути, с лёгкостью заменяется group by. Тогда зачем он?  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
для удобства, я так думаю
и для полноты
да и операторы это всё-таки разные :)
27 окт 12, 03:53    [13384298]     Ответить | Цитировать Сообщить модератору
 Re: Distinct - по сути, с лёгкостью заменяется group by. Тогда зачем он?  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 5975
Charles Weyland
Distinct - по сути, с лёгкостью заменяется group by. Тогда зачем он?

Замените с легкостью, пожалуйста, distinct внутри агрегатов, и покажите, как это у вас получится.
27 окт 12, 05:04    [13384315]     Ответить | Цитировать Сообщить модератору
 Re: Distinct - по сути, с лёгкостью заменяется group by. Тогда зачем он?  [new]
Crimean
Member

Откуда:
Сообщений: 13148
а "+" легко заменяет "*", действительно!
27 окт 12, 14:26    [13384736]     Ответить | Цитировать Сообщить модератору
 Re: Distinct - по сути, с лёгкостью заменяется group by. Тогда зачем он?  [new]
Добрый Э - Эх
Guest
Сон Веры Павловны
Замените с легкостью, пожалуйста, distinct внутри агрегатов, и покажите, как это у вас получится.
А в чем сложность? Вложенные запросы есть. Сделать предагрегацию перед финальным просчетом уникальных вхождений - тоже не проблема.
Пример (банальный, но и более сложные случае реализуемы аналогичным образом):
--
-- Набор тестовых данных:
with
  t (id, val) as
    (
      select *
        from (values
                (1,0),(1,1),(1,1),(1,2),(1,2),(1,2),
                (2,0),(2,1),(2,1),(2,2),(2,2),(2,2),(2,3),(2,3),(2,3),(2,3)
             ) v(i,v)
    )
--
-- Основной запрос (с использованием DISTINCT внутри агрегата):
select id, count(val) as total_cnt, count(distinct val) as unique_cnt
  from t
 group by id;

--
-- Набор тестовых данных:
with
  t (id, val) as
    (
      select *
        from (values
                (1,0),(1,1),(1,1),(1,2),(1,2),(1,2),
                (2,0),(2,1),(2,1),(2,2),(2,2),(2,2),(2,3),(2,3),(2,3),(2,3)
             ) v(i,v)
    )
--
-- Основной запрос (с использованием предагрегации для эмуляции внутриагрегатного DISTINCT-а):
select id, sum(cnt) as total_cnt, count(val) as unique_cnt
  from (
         select id, val, count(1) as cnt
           from t
          group by id, val
       ) as v 
 group by id;

Как видим, результат запросов идентичен, а реализация разная, в том числе - и безDISTINCTная
1 ноя 12, 04:55    [13405958]     Ответить | Цитировать Сообщить модератору
 Re: Distinct - по сути, с лёгкостью заменяется group by. Тогда зачем он?  [new]
init.ora
Member

Откуда: гетто
Сообщений: 317
в таблице 1000 полей.
вывести без дистинктов все уникальные строки.

думаю, без дистинкта в таких случаях непросто.
1 ноя 12, 09:54    [13406452]     Ответить | Цитировать Сообщить модератору
 Re: Distinct - по сути, с лёгкостью заменяется group by. Тогда зачем он?  [new]
Добрый Э - Эх
Guest
init.ora
в таблице 1000 полей.
вывести без дистинктов все уникальные строки.

думаю, без дистинкта в таких случаях непросто.
Придумал "кривую" схему хранения данных - придумывай "кривые" способы их обработки: динамическое построение текста запроса по словарю данных с последующим его выполнением.
1 ноя 12, 09:57    [13406470]     Ответить | Цитировать Сообщить модератору
 Re: Distinct - по сути, с лёгкостью заменяется group by. Тогда зачем он?  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
init.ora
в таблице 1000 полей.
вывести без дистинктов все уникальные строки.

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

Можно легко в ssms сгенерировать список полей через SCRIPT TABLE AS. А так DISTINCT просто нагляднее и удобнее в ряде случаев как уже сказали.
1 ноя 12, 10:03    [13406507]     Ответить | Цитировать Сообщить модератору
 Re: Distinct - по сути, с лёгкостью заменяется group by. Тогда зачем он?  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33978
Блог
Ruuu
Можно легко в ssms сгенерировать список полей через SCRIPT TABLE AS.


даже генерировать ничего не нужно, перетаскивается все группа "Столбцы"
1 ноя 12, 11:51    [13407223]     Ответить | Цитировать Сообщить модератору
 Re: Distinct - по сути, с лёгкостью заменяется group by. Тогда зачем он?  [new]
Charles Weyland
Member

Откуда: Feorina "Fury" 161
Сообщений: 4348
Добрый Э - Эх
--
-- Набор тестовых данных:
with
  t (id, val) as
    (
      select *
        from (values
                (1,0),(1,1),(1,1),(1,2),(1,2),(1,2),
                (2,0),(2,1),(2,1),(2,2),(2,2),(2,2),(2,3),(2,3),(2,3),(2,3)
             ) v(i,v)
    )
--
-- Основной запрос (с использованием DISTINCT внутри агрегата):
select id, count(val) as total_cnt, count(distinct val) as unique_cnt
  from t
 group by id;

И, более того, вариант без distinct выполняется в 5 раз быстрее.

К сообщению приложен файл. Размер - 145Kb
1 ноя 12, 21:20    [13411144]     Ответить | Цитировать Сообщить модератору
 Re: Distinct - по сути, с лёгкостью заменяется group by. Тогда зачем он?  [new]
qwrqwr
Member

Откуда: Msk
Сообщений: 1684
Charles Weyland
И, более того, вариант без distinct выполняется в 5 раз быстрее.

Кост ниже еще не значит "быстрее".
Тем более, вроде как в MsSQL-2012 это подправили (но проверить не на чем).
1 ноя 12, 21:39    [13411199]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить