PostgreSQL 특화 기능 × CI4 — JSONB · Array · Window를 쿼리빌더로
📋 실습 안내
✏️ CODE EDITOR (JSX)
▶ 실행 버튼을 눌러 코드를 테스트하세요.
👁️ 내 미리보기
내 코드 실행 결과
🎯 완성 미리보기
목표
위 에디터 코드를 수정해서 이 결과물과 똑같이 만들어보세요!
💡 TODO 주석을 채워서 위 결과물처럼 동작하게 만들어보세요
🤖 AI 선생님에게 질문하기
이번 강의 전용
▼
선생님이 답변 중이에요...
⚠️ 학습 관련 질문만 답변합니다. 관련 없는 질문은 자동으로 학습으로 유도됩니다.
Q1. PostgreSQL에서 JSONB 컬럼의 특정 키 값을 텍스트로 추출하는 올바른 연산자는?
💡 `->>` 연산자는 JSONB에서 지정한 키의 값을 텍스트(VARCHAR) 형태로 반환합니다. `->` 연산자는 JSONB 타입으로 반환합니다. `#>`, `#>>` 연산자는 중첩 경로 배열을 사용합니다. MySQL의 JSON_EXTRACT와 달리 PostgreSQL은 연산자 기반으로 더 간결합니다.
Q2. CI4에서 PostgreSQL JSONB의 `?` (키 존재 확인) 연산자를 사용할 때 올바른 처리 방법은?
💡 CI4/PDO에서 `?`는 파라미터 바인딩으로 해석됩니다. PostgreSQL의 JSONB 키 존재 확인 연산자 `?`를 사용하려면 `??`로 이스케이프하거나, `jsonb_exists(col, 'key')` 함수를 사용합니다. raw query에서 named binding을 활용하는 방법도 있습니다.
Q3. PostgreSQL의 배열 컬럼에서 특정 값이 포함되어 있는지 확인하는 쿼리는?
💡 PostgreSQL에서 배열 컬럼에 특정 값이 존재하는지 확인하려면 `'val' = ANY(col)` 구문을 사용합니다. 이는 배열의 각 원소와 비교하여 하나라도 일치하면 TRUE를 반환합니다. GIN 인덱스가 있을 경우 이 연산은 매우 빠르게 처리됩니다.
Q4. Window Function에서 RANK()와 DENSE_RANK()의 차이점은?
💡 RANK()는 동점자에게 같은 순위를 부여하고 다음 순위를 건너뜁니다(1,1,3). DENSE_RANK()는 동점자에게 같은 순위를 부여하되 건너뜀 없이 연속 순위를 부여합니다(1,1,2). 실무에서 '상위 N위 이내'를 구할 때는 DENSE_RANK가 유용합니다.
Q5. Window Function의 결과를 WHERE 절로 필터링하려면 어떻게 해야 하는가?
💡 Window Function은 SELECT 절에서 계산되므로 같은 쿼리의 WHERE나 HAVING 절에서 직접 참조할 수 없습니다. 반드시 인라인 뷰(서브쿼리)나 CTE(WITH 절)로 감싼 후 외부 쿼리의 WHERE 절에서 필터링해야 합니다.
😅
아쉽네요!
점수: 0점 — 70점 이상이 되어야 통과합니다.