SQL: выберите верхние элементы из групп на основе количества

У меня есть три таблицы:

  1. Первый блок запроса: он вычисляет показы

  2. Второй блок запроса: он вычисляет конверсии

  3. Затем я присоединяюсь к созданию другой таблицы


      create table stage_II_final_suzuki_1648436600 as
        select a.*,b.conversions, b.total_users 
        from tmp.stage_II_imps_suzuki_1648436600 a
        join 
        tmp.stage_II_conversions_suzuki_1648436600 b
        on a.domain = b.domain
           and a.ad_position = b.ad_position
           and a.browser_id = b.browser_id
           and a.hour_of_day = b.hour_of_day
           and a.day_of_week = b.day_of_week
           and a.exchange_id = b.exchange_id
           and a.device_type = b.device_type
        ORDER BY b.total_users;

Результат:

домен, ad_position, hour_of_day, browser_id, exchange_id, day_of_week, device_type, показы, конверсии, общее количество пользователей

Теперь, как мне вернуть значения функций (~20%), из которых обслуживают ~80% пользователей?

Характеристики: домен, позиция_объявления, идентификатор_браузера, час_дня, день_недели, идентификатор_обмена, тип_устройства.

так например,

доля браузера и пользователя chrome - 55% Mozila FF - 17% MS Edge - 12% Safari - 15% duck duck go - 0,5% Тогда результатом должны быть Chrome, Mozila и Safari

и аналогично для всех функций

1 ответ

Этот запрос использует в подзапросе, чтобы получить промежуточную сумму доли рынка.
Он включает в себя минимальное количество браузеров, чтобы общая доля рынка превышала 80%.
NB. Это проверено на сервере SQL dbFiddle, но я считаю, что Google bigQuery (используемый google-ads-data-hub) имеет все используемые функции.

       with shares as
( select browser, share,
    sum(share) over (order by share desc) sum_shares
    from browser_user_share) ,
over80 as
( select max(share) s80
  from shares
  where sum_shares >= 80 )
select browser, share, sum_shares
from shares,
over80
where share >= over80.s80;
браузер | поделиться | сумма_долей
:-------- | ----: | ---------:
хром | 55,00 | 55.00
Мозила ФФ | 17.00 | 72.00
Сафари | 15.00 | 87.00

db<>скрипка здесь

Другие вопросы по тегам