まず、DB2 for i5/OS V5R4 を実行しています。ROW_NUMBER()、RANK()、および共通テーブル式があります。TOP n PERCENT または LIMIT OFFSET がありません。
私が扱っている実際のデータ セットを説明するのは難しいので、列が である気象履歴テーブルがあるとしましょう(city, temperature, timestamp)
。各グループの中央値と平均値を比較したい(city)
。
これは、テーブル全体の集計の中央値を取得するために見つけた最もクリーンな方法でした。私はここのIBM Redbookからそれを適応させました:
WITH base_t AS
( SELECT temp, row_number() over (order by temperature) AS rownum FROM t ),
count_t AS
( SELECT COUNT(temperature) + 1 AS base_count FROM base_t ),
median_t AS
( SELECT temperature FROM base_t, count_t
WHERE rownum in (FLOOR(base_count/2e0), CEILING(base_count/2e0)) )
SELECT DECIMAL(AVG(temperature),10,2) AS median FROM median_t
これは、単一の行を戻すにはうまく機能しますが、グループ化するにはうまくいかないようです。概念的には、これが私が望むものです:
SELECT city, AVG(temperature), MEDIAN(temperature) FROM ...
都市 | 平均温度 | median_temp
================================================== =
「ミネアポリス」 | 60 | 64
'ミルウォーキー' | 65 | 66
'マスキーゴン' | 70 | 61
私を愚かに見せる答えがあるかもしれませんが、私はメンタルブロックを抱えており、これは今私が取り組むべき一番のことではありません. 可能だと思われますが、非常に複雑なものは使用できません。これは大きなテーブルであり、集計される列をカスタマイズする機能が必要です。