Я использую ORACLE SQL
(11g), допустим, у нас есть таблица с именем TRANSMISSIONS
, в которой есть поле, содержащее file sizes
Я хочу выполнять различные агрегатные функции на различных partitions
скажем, для разных размеров файлов. Однако я хочу, чтобы разделы были кумулятивными. Таким образом, файл 10 KB
будет как в разделе <=500000 bytes
, так и в разделе <=2000000000
. Итак, если бы у меня было 5 файлов <=500000
и 5 файлов > 50000 && < 2000000000
, то у меня были бы следующие результаты:
label | number
---------------|-------
<=500000 | 5
<=2000000000 | 10
Итак, в основном первоначальный подход заключался в создании таких союзов:
SELECT '<=500000' as label,
COUNT(1) AS numberFiles,
round(avg(tra.TRA_SIZE)) as averageSize,
sum(tra.TRA_SIZE) as totalSize
FROM TRANSMISSION tra
where tra.TRA_SIZE <= 500000
UNION
SELECT '<=2000000000' as label,
COUNT(1) AS numberFiles,
round(avg(tra.TRA_SIZE)) as averageSize,
sum(tra.TRA_SIZE) as totalSize
FROM TRANSMISSION tra
where tra.TRA_SIZE <= 2000000000;
Однако, если у меня есть несколько из этих partitions
, которые я делаю, это приведет к огромному непонятному запросу, в котором единственное, что в основном меняется, - это label
и where
предложения.
Is есть ли способ лучше сделать это?