0
次の表を参照してください。テーブルからの複数の列に基づいてレコードを取得する方法
上記の表から、私はLN_LOAN_IDとBR_IDあたりの中東BFS_SCOREを選択します。単一のスコアでいくつかのLN_LOAN_IDがあります。
上記の表の例として、必要な出力は次のとおりです。
私はこれを実現する方法を教えてください。
次の表を参照してください。テーブルからの複数の列に基づいてレコードを取得する方法
上記の表から、私はLN_LOAN_IDとBR_IDあたりの中東BFS_SCOREを選択します。単一のスコアでいくつかのLN_LOAN_IDがあります。
上記の表の例として、必要な出力は次のとおりです。
私はこれを実現する方法を教えてください。
LN_LOAD_ID, BR_ID
のユニークペアに2つのスコアがある場合を処理するには、BFS_SCORE
の中間値がないため、中央値が必要です。
のPostgresソリューション:次に、あなたのクエリは、このような単純なになります
CREATE OR REPLACE FUNCTION _final_median(NUMERIC[])
RETURNS NUMERIC AS
$$
SELECT AVG(val)
FROM (
SELECT val
FROM unnest($1) val
ORDER BY 1
LIMIT 2 - MOD(array_upper($1, 1), 2)
OFFSET CEIL(array_upper($1, 1)/2.0) - 1
) sub;
$$
LANGUAGE 'sql' IMMUTABLE;
CREATE AGGREGATE median(NUMERIC) (
SFUNC=array_append,
STYPE=NUMERIC[],
FINALFUNC=_final_median,
INITCOND='{}'
);
:
がPostgres wiki以下の中央値集計関数を作成します
select
ln_load_id,
median(bfs_score) as bfs_score
br_id
from yourtable
しかし、トリッキーな部分はウィットに来るh score_order
。ペアが2つあり、中央値ではなく中央値が実際に必要な場合は、計算されたスコアの行がないため、nullになります。それ以外の場合は、テーブルに戻って「中」の列を検索してください:
select
t1.ln_load_id, t1.bfs_score, t1.br_id, t2.score_order
from (
select
ln_load_id,
median(bfs_score) as bfs_score
br_id
from yourtable
) t1
left join yourtable t2 on
t1.ln_load_id = t2.ln_load_id
and t1.br_id = t2.br_id
and t1.bfs_score = t2.bfs_score
どのようなデータベースをお使いですか?また、おそらく "中間" bfs_scoreではなく中央値が必要です。 –
上記の例で示したように、LN_LOAN_IDあたり2つのBR_IDがあり、奇数ではない場合はどうなりますか? – woodhead92
@KamilG。、私はSQL 2012を使用しています。私はスコアのメダインは使用できません。要件は、スコアが2つ以上ある場合は中間スコアを取得し、スコアが2つの場合は最小スコアを使用することです。 – jambai