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

Откуда: Екатеринбург
Сообщений: 310
Задача.
Есть таблица. содержащая цвет объекта и еще какие-то параметры объекта. Необходимо посчитать доли объектов каждого цвета.
Задача тривиальная, но нужно сделать это одним выражением, без переменных, представлений, вложенных запросов или CTE, используя count() и over().

Поясню откуда такая постановка.
Недавно сдавал один экзамен, не будем называть его номер))) и там попался подобный вопрос.
На выбор были 3 варианта ответа, которые на мой взгляд должны были вызвать ошибку на этапе компиляции запроса, и один, который на мой взгляд возвращал неправильные данные, но был верен с точки зрения синтаксиса. И вот экзамен я сдал, а вопрос меня мучает.

Кода у меня, к сожалению, нет, да и не стал бы его выкладывать, все же подписывали бумажки.

PS 6115226 Поиском пользовался, но там немного не то.
19 июн 12, 22:50    [12741853]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление доли без CTE  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
declare @t table (o int, color varchar(10));

insert into @t
values
 (1, 'red'),
 (2, 'red'),
 (3, 'white'),
 (4, 'yellow'),
 (5, 'yellow'),
 (6, 'yellow'),
 (7, 'yellow'),
 (8, 'blue'),
 (9, 'green'),
 (10, 'black');
 
select
 *,
 cast(count(*) over (partition by color) as float) / count(*) over () 
from
 @t;
?
19 июн 12, 23:06    [12741927]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление доли без CTE  [new]
.Anatoly.
Member

Откуда: Екатеринбург
Сообщений: 310
invm, строка с желтым цветом будет появляться много раз.
Насколько я понял, нужно было исключить дублирование.
20 июн 12, 07:21    [12742806]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление доли без CTE  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6202
.Anatoly.
invm, строка с желтым цветом будет появляться много раз.
Насколько я понял, нужно было исключить дублирование.

Выкинуть из выборки o и сделать distinct идет вразрез с условием задачи?
20 июн 12, 07:32    [12742816]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление доли без CTE  [new]
.Anatoly.
Member

Откуда: Екатеринбург
Сообщений: 310
Сон Веры Павловны, в точку
20 июн 12, 09:06    [12743029]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление доли без CTE  [new]
.Anatoly.
Member

Откуда: Екатеринбург
Сообщений: 310
Сон Веры Павловны, в смысле - отлично работает.
20 июн 12, 09:10    [12743047]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить