- ์นดํ ๊ณ ๋ฆฌ:
๋ฐ์ ํ ๋ฐ ์ ํ ๋ฐ์ดํฐ ํจ์ (๋ฐฐ์ด/์ค๋ธ์ ํธ)
ARRAY_SORTยถ
์ค๋ฆ์ฐจ์ ๋๋ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ ์ ๋ ฅ ARRAY ์ ์์๋ฅผ ํฌํจํ ARRAY๋ฅผ ๋ฐํํฉ๋๋ค. NULL ์์๋ฅผ NULL์ด ์๋ ์์์ ์์ด๋ ๋ค์ ์ ๋ ฌํ ์ง ์ฌ๋ถ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
๊ตฌ๋ฌธยถ
ARRAY_SORT( <array> [ , <sort_ascending> [ , <nulls_first> ] ] )
์ธ์ยถ
ํ์ ์ฌํญ
array
์ ๋ ฌํ ์์์ ARRAY์ ๋๋ค.
์ ํ ์ฌํญ
sort_ascending
๋ค์๊ณผ ๊ฐ์ด ์์๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ ์ง, ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ ์ง ์ง์ ํฉ๋๋ค.
์์๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ ค๋ฉด TRUE๋ฅผ ์ง์ ํ์ญ์์ค.
์์๋ฅผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ ค๋ฉด FALSE๋ฅผ ์ง์ ํ์ญ์์ค.
๊ธฐ๋ณธ๊ฐ: TRUE
nulls_first
๋ค์๊ณผ ๊ฐ์ด ์ ๋ ฌ๋ ARRAY์ ์์ ๋๋ ๋์ SQL NULL ์์๋ฅผ ๋ฐฐ์นํ ์ง ์ฌ๋ถ๋ฅผ ์ง์ ํฉ๋๋ค.
ARRAY์ SQL NULL ์์๋ฅผ ๋จผ์ ๋ฐฐ์นํ๋ ค๋ฉด TRUE์ ์ง์ ํ์ญ์์ค.
ARRAY์ ๋ง์ง๋ง์ SQL NULL ์์๋ฅผ ๋ฐฐ์นํ๋ ค๋ฉด FALSE์ ์ง์ ํ์ญ์์ค.
๊ธฐ๋ณธ๊ฐ: ARRAY๊ฐ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ ๊ฒฝ์ฐ๋ FALSE์ด๊ณ ARRAY๊ฐ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ ๊ฒฝ์ฐ๋ TRUE์ ๋๋ค.
์ด ์ธ์๋ SQL NULL ์์์ ์์์๋ง ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ์ด๋ JSON null ์์์ ์์์ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค.
๋ฐํยถ
์ด ํจ์๋ ์ ๋ ฌ๋ ์์๋ก array
์ ์์๋ฅผ ํฌํจํ๋ ARRAY๋ฅผ ๋ฐํํฉ๋๋ค.
์ฌ์ฉ๋ฒ ๋ ธํธยถ
์ ๋ ฌ ์์๋ ARRAY๋ฅผ ํ๋ฉดํ ํ๊ณ ํด๋น ASC | DESC and NULLS FIRST | LAST ๋งค๊ฐ ๋ณ์๋ก ORDER BY ์ ์ ์ง์ ํ์ฌ ์ป์ ์์์ ๋์ผํฉ๋๋ค.
์ ๋ ฅ ์ธ์ ์ค ํ๋๋ผ๋ NULL์ด๋ฉด ์ด ํจ์๋ NULL์ ๋ฐํํฉ๋๋ค.
ARRAY์ ๋ค์ ์ค ํ๋๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ ์ด ํจ์๋ ์์ ์ ์ธ ์ ๋ ฌ์ ์ ๊ณตํ๋ ๊ฒ์ผ๋ก ๋ณด์ฅ๋์ง ์์ต๋๋ค.
๋ ๊ฐ์ง ๋ค๋ฅธ ์ซ์ ๋๋ ํ์์คํฌํ ์ ํ์ ์์.
๋ ๊ฐ์ง ๋ค๋ฅธ ์ซ์ ๋๋ ํ์์คํฌํ ์ ํ์ ํฌํจํ๋ ์ค๋ธ์ ํธ.
์ยถ
๋ค์ ์์์๋ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ ์ ๋ ฅ ARRAY ์์ ์ ์์๊ฐ ํฌํจ๋ ์ซ์๋ก ๊ตฌ์ฑ๋ ARRAY๋ฅผ ๋ฐํํฉ๋๋ค. ์์์๋ JSON NULL(PARSE_JSON(โnullโ)) ๋ฐ SQL NULL์ด ํฌํจ๋ฉ๋๋ค.
์ ๋ ฌ๋ ARRAY์์๋ JSON NULL(null
) ๋ฐ SQL NULL(undefined
)์ด ๋ง์ง๋ง ์์์
๋๋ค.
SELECT ARRAY_SORT([20, PARSE_JSON('null'), 0, NULL, 10]);
+---------------------------------------------------+
| ARRAY_SORT([20, PARSE_JSON('NULL'), 0, NULL, 10]) |
|---------------------------------------------------|
| [ |
| 0, |
| 10, |
| 20, |
| null, |
| undefined |
| ] |
+---------------------------------------------------+
๋ค์ ์์์๋ ์์๊ฐ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ ์ซ์๋ก ๊ตฌ์ฑ๋ ARRAY๋ฅผ ๋ฐํํฉ๋๋ค. ์ ๋ ฌ๋ ARRAY์์๋ JSON NULL(null
) ๋ฐ SQL NULL(undefined
)์ด ์ฒซ ๋ฒ์งธ ์์์
๋๋ค.
SELECT ARRAY_SORT([20, PARSE_JSON('null'), 0, NULL, 10], FALSE);
+----------------------------------------------------------+
| ARRAY_SORT([20, PARSE_JSON('NULL'), 0, NULL, 10], FALSE) |
|----------------------------------------------------------|
| [ |
| undefined, |
| null, |
| 20, |
| 10, |
| 0 |
| ] |
+----------------------------------------------------------+
๋ค์ ์์์๋ ์์๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํฉ๋๋ค. ์ด ์์์๋ nulls_first
์ธ์๋ฅผ TRUE๋ก ์ค์ ํ์ฌ ์ ๋ ฌ๋ ARRAY์์ SQL NULL(undefined
)์ ๋จผ์ ๋ฐฐ์นํฉ๋๋ค. (๊ธฐ๋ณธ์ ์ผ๋ก SQL NULL์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ ARRAY์ ๋์ ๋ฐฐ์น๋ฉ๋๋ค.)
nulls_first
๋ JSON NULL(null
)์ ๋ฐฐ์น์ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค.
SELECT ARRAY_SORT([20, PARSE_JSON('null'), 0, NULL, 10], TRUE, TRUE);
+---------------------------------------------------------------+
| ARRAY_SORT([20, PARSE_JSON('NULL'), 0, NULL, 10], TRUE, TRUE) |
|---------------------------------------------------------------|
| [ |
| undefined, |
| 0, |
| 10, |
| 20, |
| null |
| ] |
+---------------------------------------------------------------+
๋ค์ ์์์๋ ์์๋ฅผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํฉ๋๋ค. ์ด ์์์๋ nulls_first
์ธ์๋ฅผ FALSE๋ก ์ค์ ํ์ฌ ์ ๋ ฌ๋ ARRAY์์ SQL NULL(undefined
)์ ๋ง์ง๋ง์ผ๋ก ๋ฐฐ์นํฉ๋๋ค. (๊ธฐ๋ณธ์ ์ผ๋ก SQL NULL์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ ARRAY์ ์์ ๋ถ๋ถ์ ๋ฐฐ์น๋ฉ๋๋ค.)
nulls_first
๋ JSON NULL(null
)์ ๋ฐฐ์น์ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค.
SELECT ARRAY_SORT([20, PARSE_JSON('null'), 0, NULL, 10], FALSE, FALSE);
+-----------------------------------------------------------------+
| ARRAY_SORT([20, PARSE_JSON('NULL'), 0, NULL, 10], FALSE, FALSE) |
|-----------------------------------------------------------------|
| [ |
| null, |
| 20, |
| 10, |
| 0, |
| undefined |
| ] |
+-----------------------------------------------------------------+
๋ค์ ์์์๋ ARRAY_INSERT ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํฌ์ํ๊ฒ ์ฑ์์ง ARRAY๋ฅผ ์์ฑํฉ๋๋ค. (์ด ์์์๋ ARRAY์ ํน์ ์์น์ ๊ฐ 1
๊ณผ 2
๋ฅผ ์ฝ์
ํฉ๋๋ค.) ๊ทธ๋ฐ ๋ค์ ARRAY_SORT ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด ARRAY๋ฅผ ์ ๋ ฌํฉ๋๋ค.
SELECT ARRAY_INSERT(ARRAY_INSERT(ARRAY_CONSTRUCT(), 3, 2), 6, 1) arr, ARRAY_SORT(arr);
+--------------+-----------------+
| ARR | ARRAY_SORT(ARR) |
|--------------+-----------------|
| [ | [ |
| undefined, | 1, |
| undefined, | 2, |
| undefined, | undefined, |
| 2, | undefined, |
| undefined, | undefined, |
| undefined, | undefined, |
| 1 | undefined |
| ] | ] |
+--------------+-----------------+
๋ค์ ์์์๋ ๋ค์ํ ์ซ์ ์ ํ์ผ๋ก ARRAY๋ฅผ ์ ๋ ฌํ๋ฉด ๋ถ์์ ํ๊ฒ ์ ๋ ฌ๋๋ ๊ฒ์ ๋ณด์ฌ์ค๋๋ค. ์ด ์์์๋ NUMBER ๊ฐ๊ณผ REAL ๊ฐ์ ํฌํจํ๋ ARRAY๋ฅผ ์ฌ์ฉํฉ๋๋ค.
SELECT ARRAY_SORT([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1e0::REAL]) AS array_of_different_numeric_types;
+----------------------------------+
| ARRAY_OF_DIFFERENT_NUMERIC_TYPES |
|----------------------------------|
| [ |
| 1, |
| 1.000000000000000e+00, |
| 1, |
| 1, |
| 1, |
| 1, |
| 1, |
| 1, |
| 1, |
| 1, |
| 1, |
| 1, |
| 1, |
| 1, |
| 1, |
| 1, |
| 1 |
| ] |
+----------------------------------+