2017-06-09 8 views
0

PostgreSQL 9.5データベースには、count(bigint)とarray(text)という2つのカラムを持つテーブルがあります。PostgreSQLの配列で条件付きで最も一般的な値を選択します

count  array 
6   "112,19.3,142,142,19.3,172,172,20.3,202,202,20.3,232,232,19.3,262,262,19.3,292" 

アレイは、値の6(したがってカウント= 6)セット、すなわち、Lower_limitValueUpper_limitを表します。条件を変更する必要があります。すなわち、上限と下限が一致したときに、最初の上限と下限を選択し、最も一般的な値(19.3)を限界値に戻します。私の希望する出力は次のようになります:

count array 
1  112, 19.3, 292 

希望の出力に向かっていくつかの指針を持つのに役立つ人はいますか?

答えて

1

私は管理する必要があります - あなたはカウント= 1を得る方法を理解していませんが、以下はfirsrt、最後、最も一般的な値で配列を作成する方法の例です。いくつかのMOS共通の値が存在するかどう気それは予測不可能我々はアレイが上限と下限の一致に基づいて更新するとき

t=# 
with a(r) as (values(array[112,19.3,142,142,19.3,172,172,20.3,202,202,20.3,232,232,19.3,262,262,19.3,292])) 
, p as (select * from a,unnest(a.r) with ordinality) 
, t as (
select count(1) over (partition by unnest) 
, unnest u 
, r[1] a 
, r[array_length(r,1)] e 
from p 
order by unnest 
limit 1 
) 
select array[a,u,e] 
from t 
; 
    array 
---------------- 
{112,19.3,292} 
(1 row) 
+0

カウントは、次にISN(上下、値)の値の6セットを表し、EMのに選ぶだろう出力に基づいてカウントを更新することは可能でしょうか?あなたのクエリのように1つのセットを返しました。 –

+0

申し訳ありません - 私は従っていません - カウントは3になるでしょう?1つではありませんか?私はあなたが最初に6を持っている理由を得ませんでした:) –

+0

各カウントは3つの値を含む必要があります。おそらく、配列要素を数え、最後の要素数を更新することができます。ちょうどアイデア:) –

関連する問題