2016-08-13 5 views
1

PostgreSQLのSQLでは、データが配列として格納される列があります。配列をループし、その行を「プールなし」、「プライベートプール」、「ヒートプール」のいずれかに分類する必要があります。CASEをPostgreSQLでループするには?

これを達成する最良の方法は何ですか?

SELECT pool_features as PF, close_date as CD, close_price as CP, category as CAT 
     FROM (SELECT close_date, close_price, pool_features, 
      CASE 
      WHEN pool_features[0] = 'no_pool' THEN 'No Pool' 
      WHEN pool_features[0] = 'private_pool' THEN 'Private Pool' 
      WHEN pool_features[0] = 'heated_pool' THEN 'Heated Pool' 
         ELSE 'No Pool' 
         END AS category 
      FROM dwellings.listings_oid 
     ) as laundryData 
    WHERE close_date > '2016-04-01' AND close_price IS NOT NULL AND close_price < 1000000000 
+2

あなたの 'pool_features'配列がどのように構造化されているのか、そして配列要素に対する反復処理からどのようにデータを整理するかは明確ではありません。 **あなたの質問を編集して**明確にし、入力と予想される出力の例を提供してください。 – Patrick

答えて

0

は慎重にあなたの質問を読んで、それがpool_featuresのような配列であり、最初の要素は、プールの基本的な説明が含まれて見えます。これが当てはまらない場合は、あなたの質問を編集してください。

主なのは、SQL配列は数学行列であり、1から始まります。したがって、座標を0ではなく1と呼ぶ必要があります。

第2に、その手法は機能しますが、配列が順序付けられていない場合は分解されます(ただし、1NFの問題もあります)。そのような場合は、なぜ自分がやっていることをしているのか、それに応じて再設計するのかを慎重に考えてください。ただし、まだ適用可能な場合(1NFを壊すことがあります)、ANY()というキーワードを使用することができます。したがって、代わりに:pool_features[1] = 'no_pool'あなたはそれを書くでしょう'no_pool' = ANY(pool_features)

関連する問題