2016-08-13 4 views
1

In PostgreSQL SQL habe ich eine Spalte, in der die Daten als ein Array kommen. Ich muss das Array durchlaufen und diese Zeile entweder als "Kein Pool", "Privater Pool" oder "Beheizter Pool" kategorisieren.Wie in CASE mit PostgreSQL Schleife?

Was ist der beste Weg, dies zu erreichen?

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

Es ist überhaupt nicht klar, wie Ihre 'pool_features' Array strukturiert ist und wie Sie die Daten von Iterieren über die Array-Elemente organisieren möchten. Bitte ** bearbeiten Sie Ihre Frage und verdeutlichen Sie, geben Sie ein Beispiel für die Eingabe und erwartete Ausgabe. – Patrick

Antwort

0

Ihre Frage sorgfältig Lesen, sieht es aus wie pool_features ist ein Array und das erste Element enthält die grundlegende Beschreibung des Pools. Wenn dies nicht der Fall ist, bearbeiten Sie bitte Ihre Frage.

Faust, SQL-Arrays sind mathematische Matrizen, und sie sind 1-basiert. Sie müssen also auf die Koordinaten als 1 anstelle von 0 verweisen.

Zweitens, während dieser Ansatz funktioniert, bricht es zusammen, wenn das Array ungeordnet ist (aber dann haben Sie 1NF Probleme auch). Wenn das der Fall ist, denken Sie sorgfältig darüber nach, warum Sie das tun, was Sie tun, und passen Sie es entsprechend an. Wenn es jedoch noch anwendbar ist (es gibt gelegentlich Gründe, 1NF zu brechen), können Sie das Schlüsselwort ANY() verwenden. Also statt: pool_features[1] = 'no_pool' würden Sie es schreiben 'no_pool' = ANY(pool_features)

Verwandte Themen