2016-11-28 7 views
0

Столбцы таблицы, над которой я работаю, это customer_id, operating_system, device_type, transaction_id, transaction_time.Запрос на улов, чтобы найти процентное значение

Я хочу узнать% используемой клиентом операционной системы для транзакций, совершаемых на мобильном/планшетном устройстве за последние 360 дней.

Базовый подход: количество транзакций, в которых тип устройства (мобильный/планшет) и временная метка пройдены за 360 дней группой по клиенту _id, operating_system * 100/общее количество транзакций, выполненных конкретным клиентом для типа устройства в (мобильный/планшет) независимо от операционной системы.

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

спасибо заранее!

+0

Ниже приведен запрос у меня есть prepared.I не уверен, погода будет работать или нет. Выберите t.customer_id, t.operating_system, 100 * (count (t.transaction_id)/q1.total) От таблица t, (выберите count (transaction_id) как итог из таблицы, где device_type in (mobile, tablet) и transaction_time 360 группы по Customer_ID ) q1 Где device_type в (мобильной, таблетке) и transaction_time 360 ​​ группы по Customer_ID, operating_system –

ответ

0

В подзапросе s подсчитывается общее количество пользователей и подсчет для операционной системы. Поскольку используются аналитические функции, количество строк остается таким же, как в исходном наборе данных. Вот почему вам необходимо агрегировать функции consumer_id и operating_system. Используйте max или min:

select --group by consumer_id and operating_system 
      customer_id, 
      operating_system, 
      max(operating_system_cnt)     operating_system_cnt, 
      max(total_cnt)        total_cnt, 
      max(operating_system_cnt)*100/max(total_cnt) operating_system_percent 
    from 
    ( 
    select --calculate total count and operating_system_count 
    customer_id, 
    operating_system, 
    count(transaction_id) over(partition by customer_id, operating_system) operating_system_cnt, 
    count(transaction_id) over(partition by customer_id) total_cnt 
    from your_table 
    where --your filter conditions here for mobile/tablet and last 360 days 
    )s 
group by 
     customer_id, 
     operating_system 
+0

Спасибо за query.Just одного question.We нужно подсчитать общее количество сделок (transaction_id- уникально для каждой транзакции), так что мы можем узнать счет всей транзакции с использованием transaction_id в запросе? –

+0

Я не совсем понимаю ваши данные. Возможно ли дублирование транзакции для одного клиента и операционной системы? Отправьте пример данных. – leftjoin

+0

Исправлен запрос. Я не проверял, не могу сделать это прямо сейчас, возможно, есть и другие ошибки. – leftjoin