2017-11-21 6 views
2

enter image description here googly質問が少しありました。すべての値が標準化されている場合、各列の値に基づいて10列を選択することは可能ですか?標準化された値に基づいて上位N個の列を選択してください

したがって、たとえば

cluster Id | v1 | v2| v3 | v4 | v6 | v26 
___________________________________________ 
     1 | 4.2|0.9|05 |3.2 | 0.7|0.5 
     2 | 1.2|0.1|0.9 |0.21|0.3 |0.1 

ので、私は、クラスタ1のために3つのトップの3つの列を望んでいた場合は、この例では、私は

 cluster ID |v1 |v4 |v2 
      1 |4.2|3.2|0.9 

が、私は現時点では任意の提案に開いている必要があるだろう私Oracle Sqlを使用していますが、SQLを使用して異なるプラットフォーム上のソリューションとその不可能なソリューションを切り替えたい場合は、

を編集してください。私はSQLの開発者に複製しようとしている機能を示す画像を追加しました。フェッチサイズは変数/属性の数であり、フェッチサイズを変更したときに照会されるモデルの背後にあるテーブルがある必要があります。 ありがとうございます

+0

トップ3?あなたは最初の3列または上3列を意味します(元と仮定します)? また、正確に解決しようとしている問題は何ですか?あなたはこの誤ったことを考えているかもしれません(パラメータ/エンティティの使用のように) –

+1

"すべての値は*標準化されています*"?どういう意味ですか?次に、出力の希望の形式は何ですか? 4列の結果セット?上位の値が列v1、v4、v2から来たことを「覚えている」必要がありますか? (入力ミスもあります:値4.2はv1ではなく、v2である)。言語/プラットフォームにかかわらず、プロジェクト全体がかなり曖昧です。 – mathguy

+0

オースティン語フランス語 - 上位3つの列とアイデアは、最も高い手段で変数を引き出すことです。私はODMを使用しました。そしてKはクラスタリングを意味し、モデルを作成することを意味します.Sqlでモデルビューアを使用して必要なデータを表示し、各クラスタのトップ10、20などの変数を取得するよう設定を変更できます。しかし、そのすべてのメニューを駆動する選択文としてクエリを再作成することはできません。 – Delta1x

答えて

2

私はデータをアンピボットして再集計します。 Oracle 12cには、このための便利な機能がいくつかあります。以前のバージョンでは、より伝統的なSQLメソッドを使用するだけでした。

列名または値を使用するかどうかは不明です。次の両方を行います。最後に

select id, 
     max(case when seqnum = 1 then v end) as v_1, 
     max(case when seqnum = 2 then v end) as v_2, 
     max(case when seqnum = 3 then v end) as v_3, 
     max(case when seqnum = 1 then which end) as which_1, 
     max(case when seqnum = 2 then which end) as which_2, 
     max(case when seqnum = 3 then which end) as which_3 
from (select id, v, which, row_number() over (partition by id order by v desc) as seqnum 
     from ((select id, v1 as v, 'v1' as which from t) union all 
      (select id, v2 as v, 'v2' as which from t) union all 
      (select id, v3 as v, 'v3' as which from t) union all 
      (select id, v4 as v, 'v4' as which from t) union all 
      (select id, v5 as v, 'v5' as which from t) 
      ) t 
    ) t 
group by id; 
+0

私は、サブクエリから結果を保持する可能性をOPに提案します。 'cluster_id、rank、column_identifier、value'のEAVテーブルの一種です。 – MatBailie

0

私が取ったアプローチは、私のデータセットのクラスタリング時に作成されたすべてのOracle Data Minerのテーブルを通過することでした。そのうちの1つである表DM $ PTCLUS_K_M_1_2には、すべてのクラスタ、値、変数IDおよび名前を含むピボット・テーブルが含まれていました。

cluster_id,variable_id,value,variable_name 
    1  | 1  | 4.2 | v1 

私の例を使用して、ここで再作成そして私は、その後、各クラスタ

select * from 
(select * from DM$PTCLUS_K_M_1_2 
    where cluster_id = 1 
    order by value) 
    where rownum < 11 
のためのトップ10の変数とその値を取り出すことができ値でwhere句(CLUSTER_ID)と順序でネストされたselect文を実行して、

同様の問題を抱えていてクラスタの重心や値を取得したい人は、dataminerスキーマを見てそこにあるテーブルをチェックすることをお勧めします。必要なデータがいくつか含まれています

関連する問題