2016-08-13 3 views
1

PostgreSQL의 SQL에서 데이터가 배열로 들어오는 열이 있습니다. 나는 배열을 반복하고 그 열을 "No Pool", "Private Pool"또는 "Heated Pool"중 하나로 분류해야합니다.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로 참조해야합니다.

둘째,이 방법이 작동하는 동안 배열이 정렬되어 있지 않으면 분해됩니다 (그러나 1NF 문제도 있음). 그렇다면 왜 자신이하고있는 일을하고 있으며 그에 따라 재 설계해야하는지에 대해 신중히 생각하십시오. 그러나 여전히 적용 가능하다면 (1NF를 깨는 가끔 이유가 있음), ANY() 키워드를 사용할 수 있습니다. 그래서 대신 : pool_features[1] = 'no_pool' 당신은 쓸 것입니다 'no_pool' = ANY(pool_features)

관련 문제