Медиана значений
Функция MEDIAN возвращает медиану набора данных. Медиана – это значение, которое делит набор данных на две равные половины.
Примечание
Поддерживается со сборки 6.0.17.92.
Синтаксические правила
-
< Значимое выражение > в аргументе должно быть числовым типом данных или приводиться к нему.
Общие правила
-
Тип данных результата:
-
DECIMAL
, если тип аргументовINT
,SMALLINT
,BIGINT
,DECIMAL
; -
DOUBLE
, если тип аргументовREAL
,DOUBLE
.
-
-
Функция применяется к набору значений, полученных из аргумента путем исключения NULL-значений, т.е. записи с NULL-значением не учитываются при подсчете записей.
create or replace table test(i int); insert into test values(NULL),(2),(2),(2),(3); select median(distinct i) from test; |2.5 |
-
В одном подзапросе с GROUP BY можно использовать только одну функцию MEDIAN. При нарушении указанного требования будет выдан код завершения 99 «Операция не реализована».
create or replace table test(s int,i int, j char(10)); insert into test values(1, 400, 'd'), (1, 1, 'a'), (2, 10, 'g'), (2, 1, 'b'), (1, 25, 'e'); select s, median(i) from test group by s; |1 |25.0 | |2 |5.5 |
Примечание
Для учета записей с NULL-значением им надо явно присвоить значение. Например,
select median(case i when NULL then 0 else i end) from tab1;
или
select median (nvl(i,0)) from tab1;
-
Если указан DISTINCT, дубликаты значений исключаются из подсчета.
-
Если функция применяется к пустому набору значений, результат NULL.
-
Для определения медианы находится такое наибольшее значение, которое не превышает минимум половину всех значений выборки данных.
-
Если набор данных содержит нечетное количество значений, медиана равняется одному значению, иначе медиана равняется усредненному значению двух средних значений.
Пример
Определить среднюю зарплату сотрудников отдела и медианное значение (медиана показывает, что одна половина сотрудников отдела получает зарплату меньше медианного значения, т.е. меньше 23500.0 руб., а другая половина – больше 23500.0 руб., в то время как в среднем они получают по 29250.0 руб.).
create or replace table payment(manager char(20), salary numeric); insert into payment values('Иванов', 20000); insert into payment values('Петров', 22000); insert into payment values('Сидоров', 25000); insert into payment values('Кац', 50000); select avg(salary) as "AVG", median(salary) as "MEDIAN" from payment; AVG MEDIAN --- ------ | 29250.0| 23500.0|