質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

解決済

1回答

3714閲覧

PostgreSQLの配列型の全要素の比較

acre_maker

総合スコア145

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2016/09/05 06:29

編集2016/09/05 06:52

###前提・実現したいこと
PostgreSQLの配列型の全要素を比較してすべて大きい場合のみTrueを返したいです。

例えば
array[1, 2, 3] と array[1, 0, 2]を比較した時
(以後、array[1, 2, 3]をA1、array[1, 0, 2]をA2と呼びます)
1と1
2と0
3と2
を比較することになります。
この場合A1の要素はすべてA2の要素以上なのでTrueを返したいです。

unnestで両方のarrayを一度行にして、
その後各行を再帰WITHを用いたりして比較すれば良いかなと思ったのですがどうでしょうか?

特に再帰WITHにこだわるつもりはありませんのでどんな方法でも結構です。

皆様のアドバイスをいただけたら幸いです。
よろしくお願いします。

###補足情報(言語/FW/ツール等のバージョンなど)
PostgreSQL (9.5.4)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/09/05 06:38

よりはふくまないので 1より1が大きいかは FALSE
acre_maker

2016/09/05 07:46 編集

すいません、そうですね。 要素以上、と書くべきでした。ありがとうございました。 訂正しました。
guest

回答1

0

ベストアンサー

9.24. 集合を返す関数
http://www.postgresql.jp/document/9.5/html/functions-srf.html
を見ながら、PostgreSQL9.3で作ってみました :-)

sql

1with t(A1,A2) as( 2values(array[1, 2, 3],array[1, 0, 2])) 3select bool_And(A1[Cnt] >= A2[Cnt]) 4 from t Cross Join Generate_SubScripts(t.a1,1) as b(Cnt) 5 6| bool_and | 7|----------| 8| true | 9

投稿2016/09/05 21:00

編集2016/09/05 21:05
AketiJyuuzou

総合スコア1147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

acre_maker

2016/09/06 04:32

Generate_SubScripts、bool_Andはしらなかったです。 勉強になりました!ありがとうございました。 AketiJyuuzouさんのコードを参考に最終的にこんな感じで関数にしてみました。 CREATE OR REPLACE FUNCTION each_ge(array1 int[], array2 int[]) RETURNS bool AS $$ WITH t(a1, a2) AS ( values ($1, $2) ), s AS ( SELECT unnest(a1) AS a1, unnest(a2) AS a2 FROM t ) SELECT bool_And(a1 >= a2) FROM s $$ LANGUAGE sql IMMUTABLE;
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問