Можно ли использовать сгруппированные по «подсчету разных» результатов в одном запросе? - PullRequest
0 голосов
/ 03 декабря 2018

Я задавал вопрос раньше Почему я получил неправильный расчет COUNT DISTINCT с GROUP BY? Теперь я понимаю, почему.

Но тот факт, что один и тот же клиент может дублироваться в разныхканалы - это проблема.

Моя главная цель в этом вопросе - рассчитать процент взаимодействующих клиентов по каналам.

Таблица ВЗАИМОДЕЙСТВИЯ

CustomerID | Channel | Response
-----------+---------+----------
 245       | SMS     | Accept   
 245       | PUSH    | Ignore   
 247       | SMS     | Accept   
 249       | PUSH    | Ignore   

Формулапросто:

Percentage_by_channel = Customers_number_by_channel * 100 / All_customers
  • Customers_number_by_channel - выбор различен для подсчета.
  • All_customers - это сумма клиентов по всем каналам.

Итак, я хочу знать, можно ли сделать такой запрос SQL?

Я не смог получить All_customers, пока не получил номер клиента по каналам.Но мне нужно рассчитать процент при получении результатов по каналу.И это проблема.

Можете ли вы дать мне правильный способ сделать SQL-запрос "расчета процента взаимодействующих клиентов по каналам"?

ОБНОВЛЕНИЕ: желаемый результат:

 Channel | Customers_number | Customers_percentage
---------+------------------+----------------------
 SMS     |   1000           |       10             
 PUSH    |   3000           |       30             
 CALL    |   6000           |       60             

1 Ответ

0 голосов
/ 03 декабря 2018

Если вы хотите, чтобы числа добавлялись до 100%, как в вашем примере, тогда используйте оконные функции:

SELECT channel, 
       (count(distinct customerid) * 1.0 /
        sum(count(distinct customerid)) over ()
       ) as ratio
FROM interactions
GROUP BY channel;

Обратите внимание, что клиенты могут взаимодействовать в более чем одном канале, так что это действительносоотношение пар клиент-канал.

В противном случае a_horse_with_no_name имеет решение для всех клиентов, но цифры не добавятся к 100%.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...