2013-03-05 4 views
0

Мне нужно вычислить медианное значение столбца таблицы, которое включает различные возрастные диапазоны, и у меня возникли проблемы с поиском ответа на мою проблему. Таблица построена следующим образом:Вычисление медианы в столбцах таблицы

 
ID 0-5 5-10 11-15 16-20 ... 
------------------------------------------ 
1  14  5  12  5  ... 
2  5  11  14  17  ... 

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

+0

Для чего вам нужен желаемый результат? – Taryn

ответ

2

Не существует способа, который действительно изящный. Я бы пошел на грубую силу:

select id, 
     (case when tot1 >= totn/2 then 'col1' 
      when tot2 >= totn/2 then 'col2' 
     . . . 
     ) as mediancolumn 
from (select t.*, 
      col1 as Tot1, 
      col1 + col2 as Tot2, 
      . . . 
      (col1 + col2 + . . . coln) as Totn 
     from t 
    ) t 

Если вы действительно хотите разобрать диапазоны, то та же идея сохраняется. Но вам нужно изменить часть then в инструкции case для обработки числовых значений.

+0

В то время как метод Кайла предоставил мне отличную реализацию того, как поворачивать нужные мне столбцы, данные оказались более легкими для перебора средних медианных значений. Спасибо, Гордон. –

2

То, что вы на самом деле хотите это UNPIVOT:

SELECT ID, Value, AgeRange 
FROM 
    (SELECT * 
    FROM ages) pivotedDate 
UNPIVOT 
    (Value FOR AgeRAnge IN 
     ([0-5], [6-10], ...) 
) AS Result; 

Примечание Вы должны поместить все возрастные диапазоны в операторе вернуть их значения.

+0

Благодарим вас за отличную реализацию поворота значений, которые мне нужны. –

Смежные вопросы