SELECT
[1, 2, 3, 4] AS numbers,
['apple', 'banana', 'cherry'] AS fruits;
대괄호보다 더 다양한 상황의 배열생성 (서브쿼리 결과)
Bigquery, PostgreSQL에서 사용가능한 방법!
MySQL에서는 JSON_ARRAY
를 사용하며, Oracle에서는 PL/SQL에서 컬랙션 타입을 사용.
ARRAY[value,...]
SELECT
ARRAY[1, 2, 3, 4] AS numbers,
ARRAY['apple', 'banana', 'cherry'] AS fruits;
```
--- 2일 간격으로 20240101부터 20240110까지의 날짜 배열 생성
-- 결과는 ["2024-01-01", "2024-01-03", "2024-01-05", "2024-01-07", "2024-01-09"] 배열 생성
SELECT GENERATE_DATE_ARRAY('2024-01-01', '2024-01-10', INTERVAL 2 DAY) AS date_array;
그룹화된 결과를 배열로 집계하는데 사용하는 함수
여러 행의 값을 배열로 집계하여 데이터분석 및 보고서 작성에 유용
Bigquery, PostgreSQL에서 사용가능한 방법!
SQL server에서도 동일한 함수를 사용하나, 문자열 형태로 반환! XML, JSON으로 배열과 비슷한 형태로 반환하게 끔은 할 수 있다고 함.
SELECT user_id, ARRAY_AGG(order_id) AS orders
FROM orders
GROUP BY user_id;
Bigquery에서 배열의 element에 접근하는데 OFFSET
, ORDINAL
, SAFE
가 사용된다.
(Bigquery에서만 사용하는 기능!)
0부터 시작하는 인덱스로 접근
즉, 1번째 element는 offset(0)
을 사용.
SELECT my_array[OFFSET(0)] AS first_element
FROM (SELECT [10, 20, 30] AS my_array);
1부터 시작하는 인덱스를 사용
1번째 element 접근시, ORDINAL(1)
사용
SELECT my_array[ORDINAL(1)] AS first_element -- 첫 번째 요소
FROM (SELECT [10, 20, 30] AS my_array);
배열 인덱스에 접근시, 유효하지 않은 인덱스 오류 방지
SAFE_OFFSET
,SAFE_ORDINAL
사용
존재하지 않는 인덱스 접근시, NULL 반환
SELECT my_array[SAFE_OFFSET(3)] AS fourth_element -- 배열의 길이가 3일 경우 NULL 반환
FROM (SELECT [10, 20, 30] AS my_array);
SELECT my_array[SAFE_ORDINAL(4)] AS fourth_element -- 배열의 길이가 3일 경우 NULL 반환
FROM (SELECT [10, 20, 30] AS my_array);
```
SELECT
*
FROM table_A
,UNNEST(col) AS name
```
또는 SELECT
*
FROM table_A
CROSS JOIN UNNEST(col) AS name
```
SELECT
MONTH,
MAX(IF(PRODUCT = 'A', SALESAMOUNT, NULL)) AS A,
MAX(IF(PRODUCT = 'B', SALESAMOUNT, NULL)) AS B
FROM SALES
GROUP BY MONTH;
BigQuery에서도 지원!! 👉BigQuery PIVOT 사용법(Pivot Operator):어쩐지 오늘은(카일스쿨)
MYSQL, ORACLE에서 사용. POSTGRESQL은 CROSSTAB 사용
SELECT *
FROM (
SELECT Month, Product, SalesAmount
FROM Sales
) AS SourceTable
PIVOT (
SUM(SalesAmount)
FOR Product IN ([A], [B])
) AS PivotTable;
👉 함께 읽으면 좋은 글