#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
вычисляется для каждой строки индивидуально. Затем значения делаются РАЗЛИЧНЫМИ, затем они подсчитываются.