SQL: выберите верхние элементы из групп на основе количества
У меня есть три таблицы:
Первый блок запроса: он вычисляет показы
Второй блок запроса: он вычисляет конверсии
Затем я присоединяюсь к созданию другой таблицы
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<>скрипка здесь