์นดํ…Œ๊ณ ๋ฆฌ:

๋ฐ˜์ •ํ˜• ๋ฐ ์ •ํ˜• ๋ฐ์ดํ„ฐ ํ•จ์ˆ˜ (๋ฐฐ์—ด/์˜ค๋ธŒ์ ํŠธ)

ARRAY_SORTยถ

์˜ค๋ฆ„์ฐจ์ˆœ ๋˜๋Š” ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ์ž…๋ ฅ ARRAY ์˜ ์š”์†Œ๋ฅผ ํฌํ•จํ•œ ARRAY๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. NULL ์š”์†Œ๋ฅผ NULL์ด ์•„๋‹Œ ์š”์†Œ์˜ ์•ž์ด๋‚˜ ๋’ค์— ์ •๋ ฌํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ตฌ๋ฌธยถ

ARRAY_SORT( <array> [ , <sort_ascending> [ , <nulls_first> ] ] )
Copy

์ธ์žยถ

ํ•„์ˆ˜ ์‚ฌํ•ญ

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]);
Copy
+---------------------------------------------------+
| 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);
Copy
+----------------------------------------------------------+
| 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);
Copy
+---------------------------------------------------------------+
| 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);
Copy
+-----------------------------------------------------------------+
| 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);
Copy
+--------------+-----------------+
| 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;
Copy
+----------------------------------+
| ARRAY_OF_DIFFERENT_NUMERIC_TYPES |
|----------------------------------|
| [                                |
|   1,                             |
|   1.000000000000000e+00,         |
|   1,                             |
|   1,                             |
|   1,                             |
|   1,                             |
|   1,                             |
|   1,                             |
|   1,                             |
|   1,                             |
|   1,                             |
|   1,                             |
|   1,                             |
|   1,                             |
|   1,                             |
|   1,                             |
|   1                              |
| ]                                |
+----------------------------------+