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

Откуда:
Сообщений: 10
Добрый день, коллеги!
Помогите пожалуйста доработать запрос.
SELECT UseTM0, count(UseTM0) as TM_Count
FROM v_GS_TM_USE0
group by UseTM0

Результат:
UseTM0 TM_Count
0 351
3 33935
1 88507
2 13071

Необходимо, чтобы в третьем столбце выводилось процентное соотношение значения столбца TM_Count от суммы значений всего этого столбца, т.е.:
UseTM0 TM_Count Percent
0 351 0.25
3 33935 24.9
1 88507 65.14
2 13071 9.62
12 авг 14, 13:53    [16431001]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление процента от суммы  [new]
mrGuest
Guest
ozzymous,

Подцепите с помощью cross apply подзапрос получающий сумму по столбцу
12 авг 14, 13:57    [16431034]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление процента от суммы  [new]
_djХомяГ
Guest
declare @t table
(val numeric(20,0))
insert into @t
select 351
union all
select 33935
union all
select 88507
union all
select 13071

select val,val/tot*100. from @t cross join (select sum(val) as Tot from @t) t
12 авг 14, 13:59    [16431047]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление процента от суммы  [new]
iap
Member

Откуда: Москва
Сообщений: 47084
WITH CTE AS(SELECT*FROM(VALUES
 (0,	351)
,(3,	33935)
,(1,	88507)
,(2,	13071)
)T(UseTM0,TM_Count))
SELECT UseTM0,COUNT(TM_Count),100.00*COUNT(TM_Count)/SUM(COUNT(TM_Count))OVER()
FROM CTE
GROUP BY UseTM0;
12 авг 14, 14:03    [16431072]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление процента от суммы  [new]
iap
Member

Откуда: Москва
Сообщений: 47084
SELECT UseTM0,COUNT(TM_Count),100.00*COUNT(TM_Count)/SUM(COUNT(TM_Count))OVER()
FROM v_GS_TM_USE0
GROUP BY UseTM0;
12 авг 14, 14:06    [16431103]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление процента от суммы  [new]
mrGuest
Guest
iap
WITH CTE AS(SELECT*FROM(VALUES
 (0,	351)
,(3,	33935)
,(1,	88507)
,(2,	13071)
)T(UseTM0,TM_Count))
SELECT UseTM0,COUNT(TM_Count),100.00*COUNT(TM_Count)/SUM(COUNT(TM_Count))OVER()
FROM CTE
GROUP BY UseTM0;


А не вернет ли в Вашем случае COUNT(TM_Count) единицу?
12 авг 14, 14:08    [16431117]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление процента от суммы  [new]
iap
Member

Откуда: Москва
Сообщений: 47084
mrGuest
iap
WITH CTE AS(SELECT*FROM(VALUES
 (0,	351)
,(3,	33935)
,(1,	88507)
,(2,	13071)
)T(UseTM0,TM_Count))
SELECT UseTM0,COUNT(TM_Count),100.00*COUNT(TM_Count)/SUM(COUNT(TM_Count))OVER()
FROM CTE
GROUP BY UseTM0;



А не вернет ли в Вашем случае COUNT(TM_Count) единицу?
Я ж поправился.
С моим CTE надо не COUNT писать, а SUM.
Но на VIEW из стартового поста должно быть всё нормально
12 авг 14, 14:10    [16431142]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление процента от суммы  [new]
mrGuest
Guest
iap
Я ж поправился.


С поправкой вопросов нет, появилась пока писал сообщение)
12 авг 14, 14:14    [16431168]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление процента от суммы  [new]
ozzymous
Member

Откуда:
Сообщений: 10
Огромное спасибо за помощь!
Заработал вариант:
SELECT UseTM0, COUNT(tm.UseTM0) AS 'TM_Count', COUNT(UseTM0)*100/SUM(COUNT(UseTM0)) Over()
FROM v_GS_TM_USE0
GROUP BY UseTM0

С функцией Over() сталкиваюсь впервые, быстрое гугление еще больше запутало.
P.S. С Over() не удается задать имя столбцу, в котором выводятся проценты.
12 авг 14, 14:41    [16431378]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление процента от суммы  [new]
Glory
Member

Откуда:
Сообщений: 104751
ozzymous
P.S. С Over() не удается задать имя столбцу, в котором выводятся проценты.

Потому что имя надо указывать в правильном месте, а не где хочется
SELECT UseTM0,COUNT(TM_Count) AS TM_Count,100.00*COUNT(TM_Count)/SUM(COUNT(TM_Count)) OVER() as x
FROM CTE
GROUP BY UseTM0;
12 авг 14, 14:44    [16431404]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление процента от суммы  [new]
iap
Member

Откуда: Москва
Сообщений: 47084
ozzymous
Огромное спасибо за помощь!
Заработал вариант:
SELECT UseTM0, COUNT(tm.UseTM0) AS 'TM_Count', COUNT(UseTM0)*100/SUM(COUNT(UseTM0)) Over()
FROM v_GS_TM_USE0
GROUP BY UseTM0


С функцией Over() сталкиваюсь впервые, быстрое гугление еще больше запутало.
P.S. С Over() не удается задать имя столбцу, в котором выводятся проценты.
OVER() - это не функция.
Это часть функции.

Предложение OVER (Transact-SQL)
12 авг 14, 14:50    [16431454]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление процента от суммы  [new]
Mairos
Member

Откуда:
Сообщений: 555
ozzymous, так тоже работает
WITH CTE AS(SELECT*FROM(VALUES
 (0,	351)
,(3,	33935)
,(1,	88507)
,(2,	13071)
)T(UseTM0,TM_Count))
SELECT UseTM0,TM_Count,100.00*TM_Count/SUM(TM_Count)OVER()
FROM CTE
GROUP BY UseTM0,TM_Count;
14 авг 14, 11:01    [16440025]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление процента от суммы  [new]
Mairos
Member

Откуда:
Сообщений: 555
iap, пардон )) Повторил ваш вариант, не поглядев выше ))
14 авг 14, 11:02    [16440038]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить