RelatedField
- PrimaryKeyRelatedField : 기본 키를 사용하여 관계의 대상을 나타내는 데에 사용
- StringRelatedField : str 메서드를 사용하여 관계의 대상을 나타내는 데에 사용
- SlugRelatedField : 특정 대상의 필드를 사용하여 관계의 대항을 나타내는 데에 사용
사용법 : SlugRelatedField(slug_field="특정 필드명") - HyperlinkedRelatedField : 하이퍼 링크를 제공할 수 있는 RelatedField
사용법 : HyperlinkedRelatedField(view_name='urls에서 지정해준 name속성 값')
UNION(합집합)
- 여러개의 테이블들이나 SELECT 결과를 하나의 결과로 합쳐줌
- UNION vs UNION ALL
- UNION은 중복을 제거
EXCEPT(MINUS)
- 하나의 SELECT 결과에서 다른 SELECT 결과를 빼주는 것이 가능
INTERSECT(교집합)
- 여러 개의 SELECT문에서 같은 레코드들만 찾아줌
COALESCE(Expression1, Expression2, ...)
- 첫번째 Expression부터 값이 NULL이 아닌 것이 나오면 그 값을 리턴하고 모두 NULL이면 NULL을 리턴.
- NULL 값을 다른 값으로 바꾸고 싶을 때 사용
NULLIF(Expression1, Expression2)
- Expression1과 Expression2의 값이 같으면 NULL을 리턴한다.
LISTAGG
- GROUP BY에서 사용되는 Aggregate 함수 중의 하나
- ex) 사용자 ID별로 채널을 순서대로 리스트
SELECT
userid,
LISTAGG(channel, '구분자') WITHIN GROUP (ORDER BY ts) channels FROM raw_data.user_session_channel usc
-- userid 값으로 기준으로 channel을 각 레코드의 ts값 기준 오름차순으로 나열하라!(채널과 채널 사이에 구분자를 넣을 수 있다)
JOIN raw_data.session_timestamp st ON usc.sessionid = st.sessionid
GROUP BY 1
LIMIT 10;
WINDOW
- Syntax
- function(expression) OVER ( [ PARTITION BY expression] [ ORDER BY expression ] )
- Useful function
- ROW_NUMBER, FIRST_VALUE, LAST_VALUE, LAG
- Math functions: AVG, SUM, COUNT, MAX, MIN, MEDIAN, NTH_VALUE
- LAG
SELECT usc.*, st.ts,
LAG(channel,1) OVER (PARTITION BY userId ORDER BY ts) prev_channel
FROM raw_data.user_session_channel usc
JOIN raw_data.session_timestamp st ON usc.sessionid = st.sessionid
ORDER BY usc.userid, st.ts
-- 이전 채널 찾기(ts를 내림차순으로 하면 다음 채널 찾기도 가능)
JSON PARSING Functions
- JSON의 포맷을 이미 아는 상황에서만 사용가능한 함수
- JSON String을 입력으로 받아 특정 필드의 값을 추출가능 (nested 구조 지원)
'데브코스 > Week 5' 카테고리의 다른 글
Week 5 - 4 (0) | 2024.04.11 |
---|---|
Week 5 - 3 (0) | 2024.04.10 |
Week 5 - 2 (0) | 2024.04.09 |
Week 5 - 1 (0) | 2024.04.08 |