Нахождение процента от общего числа в столбце - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть следующий запрос, который дает разделение наших пользователей на основе того, пришли ли они с Интернета или с мобильного телефона.Вместо просто количества пользователей я хочу показать процент от общего числа пользователей для каждого источника.Как бы я рассчитал это в одном запросе?

select source, count(*) as total_users
from table
where is_active = 1
and source in ('web','mobile')
group by 1

Ответы [ 4 ]

0 голосов
/ 30 ноября 2018

Я бы просто написал это, используя оконные функции:

select source, count(*) as total_users,
       count(*) / sum(count(*)) over () as ratio
from table
where is_active = 1 and
      source in ('web', 'mobile')
group by source;
0 голосов
/ 30 ноября 2018
SELECT
  *,
  total_users * 100.0 / SUM(total_users) OVER () AS percentage_of_total
FROM
(
    select source, count(*) as total_users
    from table
    where is_active = 1
    and source in ('web','mobile')
    group by source
)
  totals_by_source

https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=6c0af52dcb10b072b876ae593773e148

0 голосов
/ 30 ноября 2018

Альтернативная презентация:

SELECT
  100.0*count(case when source = 'mobile' then 1 end) as mcount/count(*),
  100.0*count(case when source = 'web' then 1 end) as wcount/count(*)
FROM
  t
WHERE 
  source in ('web','mobile') and is_active = 1
0 голосов
/ 30 ноября 2018

попробуйте, как показано ниже

 with cte as
   ( select source, count(*) as total_users     
    from table
    where is_active = 1
    and source in ('web','mobile')
    group by source
  ) SELECT source,total_users,  
   total_users * 100.0 / SUM(total_users) OVER () AS percentage from cte
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...