SQL стратифицированный образец с минимумом на владельца для QA - PullRequest
0 голосов
/ 07 июня 2019

У меня SQL-популяция - давайте называть их оповещениями.Каждое предупреждение среди различных других полей содержит тип предупреждения (сценарий) и аналитика, который обработал это предупреждение.Мы пытаемся сделать образец QA для различных бизнес-единиц, и у каждого из них свои требования.Большинство из них просты, но у нас есть один хитрый.Вот требования:

Мы должны выполнить выборку по следующим параметрам:

  1. Закрытые оповещения для каждого сценария оповещения.Общая выборка должна быть не менее 60. Будет пропорционально распределена по объему сценария.

  2. 5 обзоров на аналитика или 100% на аналитика, в зависимости от того, что меньше.

  3. Все аналитики должны быть в выборке, и каждый сценарий должен иметьпо крайней мере, один обзор.

Я хотел бы встроить все это в SQL, чтобы SQL мог вернуть мне образец.У нас есть «минимум 5 на аналитика или 100%, в зависимости от того, что меньше» от всей совокупности, однако нам нужно сначала получить стратифицированную выборку, но включить в этот процесс минимум 5 на аналитика.

Первым делом я хотел сделать стратифицированную выборку, поэтому для этого я определил, сколько нужно каждого сценария для удовлетворения этих требований, и поместил его в виде столбца в возвращенном наборе данных.

Вот вершина моего SQL:

SELECT D.*
FROM (
        SELECT *,
        ROW_NUMBER() OVER (PARTITION BY SCENARIO_DESCRIPTION_NM ORDER BY ALERT_ID) AS SEQNUM,
        COUNT(*) OVER () AS TOTAL_COUNT,
        COUNT(*) OVER (PARTITION BY SCENARIO_DESCRIPTION_NM) AS SN_COUNT,
        CEIL(SN_COUNT * (SN_COUNT * 1.0 / TOTAL_COUNT)) AS SAMPLE_SIZE
        FROM

В конце запроса у меня есть:

 WHERE SEQNUM < 500 * (SN_COUNT * 1.0 / TOTAL_COUNT)

Что это дает мне столбец в концеВозврат, который говорит мне размер выборки для каждого сценария:

enter image description here

Однако, это просто говорит мне, что мне нужно, я действительно хочу сделать запрос возврататолько стратифицированную выборку, НО она должна учитывать для каждого аналитика в популяции, представленной максимум 5 на 100%, в зависимости от того, что меньше (см. правило № 2 выше).Это похоже на объединение двух методов выборки, но я не уверен, как это реализовать.

Исходя из трех приведенных выше правил, как бы это сделать в SQL, чтобы вернуть этот образец в соответствие с этими правилами?Я предполагаю, что это будет несколько запросов для каждого, но затем выполнить своего рода JOIN, но не знаю, как подойти к этому.Заранее спасибо.

...