Процент игроков, которые играют в эту игру каждый месяц Redshift

#sql #amazon-web-services #amazon-redshift

#sql #amazon-веб-сервисы #amazon-redshift

Вопрос:

Этот запрос получает количество всех активных игроков каждый месяц из таблицы активности:

 SELECT
  date_trunc('month', createdat) as month,
  count(distinct playerid) as play_all
FROM
    activity
group by month
order by 1
  

И этот запрос получает количество игроков, которые играют в игру «пчелка» каждый месяц:

 SELECT
  date_trunc('month', createdat) as month,
  count(distinct playerid) as play_bee
FROM
    activity
where gamename = 'bee'    
group by month
order by 1
  

Как я могу получить процент игроков, которые играют в игру «bee» каждый месяц?

Ответ №1:

Это может сработать:

 SELECT
  DATE_TRUNC('month', createdat) AS month,
  COUNT(DISTINCT playerid) AS play_all,
  COUNT(DISTINCT CASE WHEN gamename = 'bee' THEN playerid END) AS play_bee,
  100. * COUNT(DISTINCT CASE WHEN gamename = 'bee' THEN playerid END)
       / COUNT(DISTINCT playerid) AS percent_play_bee,
FROM
    activity
group by month
order by 1
  

Он использует тот факт, что CASE WHEN gamename = 'bee' THEN playerid END вернет playerid if gamename = 'bee , но вернет NONE , если это не так. (Я не уверен, что ответ «НЕТ» будет включен в COUNT(DISTINCT..) , поэтому он может быть отклонен на 1.)

В принципе, CASE вычисляется для каждой строки индивидуально. Затем значения делаются РАЗЛИЧНЫМИ, затем они подсчитываются.