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

Откуда:
Сообщений: 75
Всем привет.

Подскажите, пожалуйста, как правильно создать запрос

select count(id) from table 1 where value != 10


разделить на

select count(id) from table 1 where value <= 35


и полученный результат деления умножить на 100

P.S. Запрос для нахождения % числа от числа.

Буду благодарен за помощь.
10 ноя 20, 23:01    [22229860]     Ответить | Цитировать Сообщить модератору
 Re: (select/select)*100  [new]
komrad
Member

Откуда:
Сообщений: 5345
Caxa_ASS,

+ так?

select 
sum(case when value!=10 then 1 else 0 end) / sum(case when value<=35 then 1 else 0 end) * 100 
from table 1 


или короче

select 
sum(iif(value!=10,1,0)) / sum(iif(value<=35,1,0)) * 100 
from table 1 





Сообщение было отредактировано: 10 ноя 20, 23:24
10 ноя 20, 23:27    [22229872]     Ответить | Цитировать Сообщить модератору
 Re: (select/select)*100  [new]
Caxa_ASS
Member

Откуда:
Сообщений: 75
komrad, спасибо за ответ, но к сожалению нет, на выходе получаю значение 100, что есть не верным результатом

Сообщение было отредактировано: 10 ноя 20, 23:35
10 ноя 20, 23:36    [22229878]     Ответить | Цитировать Сообщить модератору
 Re: (select/select)*100  [new]
Caxa_ASS
Member

Откуда:
Сообщений: 75
komrad,


если выводить по частям то результаты верны:

select sum(case when value!=10 then 1 else 0 end) from table 1 
select sum(case when value<=35 then 1 else 0 end) from table 1 


но в общем запросе, это почему то не работает
10 ноя 20, 23:56    [22229889]     Ответить | Цитировать Сообщить модератору
 Re: (select/select)*100  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8047
Caxa_ASS,

% не вычисляется цедочисленно, надо использовать явное или неявное приведение к числу с точкой.
11 ноя 20, 00:48    [22229905]     Ответить | Цитировать Сообщить модератору
 Re: (select/select)*100  [new]
Caxa_ASS
Member

Откуда:
Сообщений: 75
Владислав Колосов, cпасибо за подсказку, модернизировал скрипт @komrad (спасибо отдельное), и получилось следующее:

 select (
 cast (sum(case when value <=35 then 1 else 0 end) as decimal(4,2)) / cast(sum(case when value != 10 then 1 else 0 end) as decimal(4,2)))*100 
from table 1


Сообщение было отредактировано: 11 ноя 20, 01:58
11 ноя 20, 02:01    [22229916]     Ответить | Цитировать Сообщить модератору
 Re: (select/select)*100  [new]
Zelius
Member

Откуда: Россия, Москва
Сообщений: 1475
Caxa_ASS,

а так?
select 100.0 * sum(iif(value!=10,1,0)) / sum(iif(value<=35,1,0))
from table 1 
11 ноя 20, 09:25    [22229956]     Ответить | Цитировать Сообщить модератору
 Re: (select/select)*100  [new]
Caxa_ASS
Member

Откуда:
Сообщений: 75
Zelius, тоже работает, спасибо :)
11 ноя 20, 14:07    [22230129]     Ответить | Цитировать Сообщить модератору
 Re: (select/select)*100  [new]
Oleg_SQL
Member

Откуда: от туда
Сообщений: 50
и так спокойно все подставляют ноль в знаменатель )))
12 ноя 20, 09:21    [22230577]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить