![]() |
Модераторы: LSD |
![]() ![]() ![]() |
|
Sqlninja |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 353 Регистрация: 15.5.2006 Где: San Francisco, CA Репутация: 13 Всего: 13 |
Недавно столкнулся с проблемой. Так как в 8i нет ничего похожего на median() или percentile_cont(), пришлось порядочно извратиться чтобы получить нужный результат.
Итак, задача. Существует некая таблица с данными, вида
d - абстрактный признак партиционирования, в разрезе которого нужно посчитать min(), медиану и max(). По определению: Медиана (50-й процентиль, квантиль 0,5) — возможное значение признака, которое делит ранжированную совокупность (вариационный ряд выборки) на две равные части: 50 % «нижних» единиц ряда данных будут иметь значение признака не больше, чем медиана, а «верхние» 50 % — значения признака не меньше, чем медиана. По нормальному: В отсортированным по возрастанию наборе с нечетным числом элементов {1,2,3,4,5} медиана = 3, в четном наборе {1,2,3,4,5,6} медиана = AVG(3,4) Заполняем таблицу данными:
Результат нужно сохранить в таблице вида:
Вот код который делает то что нужно, ничего лучше придумать не смог:
Ну вот и все. У кого есть альтернативы, валите всё в этот пост. ) -------------------- It's better to burn out than to fade away. |
||||||||
|
|||||||||
DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 23 Всего: 44 |
||||
|
||||
Sqlninja |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 353 Регистрация: 15.5.2006 Где: San Francisco, CA Репутация: 13 Всего: 13 |
Нет, результат должен быть другим.
Вот данные: value | partition -------------------- 1 a 2 a 3 a 4 b 5 b 6 b 7 c 8 c 9 c 10 d А вот результат: min | med | max | partition ---------------------------------------------- 1 2 3 a 4 5 6 b 7 8 9 c 10 10 10 d
Короче, медиана - средний элемент упорядоченного массива, либо среднее арифметическое 2-х средних элементов, если кол-во эл-тов нечетное. -------------------- It's better to burn out than to fade away. |
|||
|
||||
DimW |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 23 Всего: 44 |
исходные данные:
результат:
решение:
на 8i нет возможности проверить, и точно не знаю на сколько в нем развита аналитика... сервер: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production PL/SQL Release 9.2.0.1.0 - Production Это сообщение отредактировал(а) DimW - 27.12.2007, 18:24 |
||||||
|
|||||||
Sqlninja |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 353 Регистрация: 15.5.2006 Где: San Francisco, CA Репутация: 13 Всего: 13 |
отлично! +1
-------------------- It's better to burn out than to fade away. |
|||
|
||||
DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 23 Всего: 44 |
сенкс!
![]() если не секрет, для чего это нужно было? это просто задача или ситуация из жизни? Это сообщение отредактировал(а) DimW - 28.12.2007, 13:09 |
|||
|
||||
Sqlninja |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 353 Регистрация: 15.5.2006 Где: San Francisco, CA Репутация: 13 Всего: 13 |
Полностью реальная ситуация - Billing Quality Key Point Identification
-------------------- It's better to burn out than to fade away. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Oracle" | |
|
Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Oracle | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |