2016-08-28 5 views
0

Как переносить эту таблицу, поэтому у меня есть два столбца, один столбец показывает соотношение для платных пользователей и один столбец, показывающий коэффициент для бесплатных пользователей. Кроме того, в моем сценарии есть ли какие-либо способы сделать код более кратким и «SQL»? Также кажется, что я не могу создать таблицу, используя инструкцию select в sqlfiddle, поскольку я получаю сообщение об ошибке, которое может быть создано только на экране схемы. В любом случае, я могу встроить оператор sql в новую таблицу?Самый краткий способ переноса таблицы SQL

Я создал скрипт на sqlfiddle, который вычисляет некоторые загрузки метрики для различных типов пользователей: http://sqlfiddle.com/#!9/79bea4/1

+0

Почему этот вопрос был заблокирован, кроме как быть беспорядочным? –

ответ

1
SELECT df.Date, 
     SUM(CASE WHEN ad.paying_customer = 'No' 
       THEN df.downloads ELSE 0 END)/
     SUM(CASE WHEN ad.paying_customer = 'No' THEN 1 ELSE 0 END) AS `Average Downloads/Free User`, 
     SUM(CASE WHEN ad.paying_customer = 'Yes' 
       THEN df.downloads ELSE 0 END)/
     SUM(CASE WHEN ad.paying_customer = 'Yes' THEN 1 ELSE 0 END) AS `Average Downloads/Paid User` 
FROM 
(
    SELECT date, 
      user_id, 
      SUM(downloads) AS downloads 
    FROM download_facts 
    GROUP BY date, 
      user_id 
) df 
INNER JOIN user_dimension ud 
    ON df.user_id = ud.user_id 
INNER JOIN account_dimension ad 
    ON ud.account_id = ad.account_id 
GROUP BY df.Date 

Demo здесь:

SQLFiddle

1

Вы можете вычислить среднее значение по беря сумму загрузок и деля по количеству пользователей. Тогда count(distinct) может посещать сайт в каждой группе:

select df.date, 
     (sum(df.downloads)/
     count(distinct case when ad.paying_customer = 'No' then df.user_id end) 
     ) as avg_free, 
     (sum(df.downloads)/
     count(distinct case when ad.paying_customer = 'Yes' then df.user_id end) 
     ) as avg_paying 
from download_facts df left join 
    user_dimension ud 
    on df.user_id = ud.user_id left join 
    account_dimension ad 
    on ad.account_id = ud.account_id 
group by df.date; 
Смежные вопросы