У меня есть набор данных, который по существу состоит из списка пакетов заданий, количества заданий, содержащихся в каждом пакете, и продолжительности каждого пакета заданий. Вот пример набора данных:
CREATE TABLE test_data
(
batch_id NUMBER,
job_count NUMBER,
duration NUMBER
);
INSERT INTO test_data VALUES (1, 37, 9);
INSERT INTO test_data VALUES (2, 47, 4);
INSERT INTO test_data VALUES (3, 66, 6);
INSERT INTO test_data VALUES (4, 46, 6);
INSERT INTO test_data VALUES (5, 54, 1);
INSERT INTO test_data VALUES (6, 35, 1);
INSERT INTO test_data VALUES (7, 55, 9);
INSERT INTO test_data VALUES (8, 82, 7);
INSERT INTO test_data VALUES (9, 12, 9);
INSERT INTO test_data VALUES (10, 52, 4);
INSERT INTO test_data VALUES (11, 3, 9);
INSERT INTO test_data VALUES (12, 90, 2);
Теперь я хочу рассчитать несколько процентилей для поля продолжительности. Как правило, это делается примерно так:
SELECT
PERCENTILE_DISC( 0.75 )
WITHIN GROUP (ORDER BY duration ASC)
AS third_quartile
FROM
test_data;
(Что дает результат 9)
Моя проблема здесь в том, что мы не хотим получать процентили на основе партий, я хочу получить их на основе отдельных заданий. Я могу довольно легко понять это вручную, сгенерировав промежуточную сумму job_count:
SELECT
batch_id,
job_count,
SUM(
job_count
)
OVER (
ORDER BY duration
ROWS UNBOUNDED PRECEDING
)
AS total_jobs,
duration
FROM
test_data
ORDER BY
duration ASC;
BATCH_ID JOB_COUNT TOTAL_JOBS DURATION
6 35 35 1
5 54 89 1
12 90 179 2
2 47 226 4
10 52 278 4
3 66 344 6
4 46 390 6
8 82 472 7
9 12 484 9
1 37 521 9
11 3 524 9
7 55 579 9
Поскольку у меня 579 заданий, то 75-й процентиль будет заданием 434. Глядя на приведенный выше набор результатов, это соответствует продолжительности 7, отличной от того, что делает стандартная функция.
По сути, я хочу рассматривать каждое задание в пакете как отдельное наблюдение и определять процентили на их основе, а не на основе пакетов.
Есть ли относительно простой способ сделать это?
per job
продолжительность? Если да, можно ли использоватьduration/job_count
в качестве меры? Пожалуйста, уточните ваши требования. Ваш второй подход не имеет особого смысла (по крайней мере, математически). - person PM 77-1   schedule 09.05.2013