0

さまざまな年齢範囲を含むテーブルの列値の中央値を計算する必要がありますが、問題の答えを見つけるのに苦労しています。表は次のように構成されています。

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

行数と集計を使用してデータの中央値を見つけることについて読んだことがありますが、それにはすべてのデータが同じ列にある必要があるようです。このため、SQL 内で PIVOT 関数を使用する必要があると思いますが、必要な構文がわかりません。誰でもこれで私を助けることができますか?

4

2 に答える 2

2

実際に必要なのは UNPIVOT です。

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

値を返すには、すべての年齢範囲をステートメントに入れる必要があることに注意してください。

于 2013-03-05T16:49:47.023 に答える
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

于 2013-03-05T16:52:52.617 に答える