[PostgreSQL] ROWNUM ์‚ฌ์šฉ๊ณผ ์ˆœ๋ฒˆ ๋ถ€์—ฌํ•˜๊ธฐ - ROW_NUMBER(), RANK(), DENSE_RANK()

[PostgreSQL] ROWNUM ์‚ฌ์šฉ๊ณผ ์ˆœ๋ฒˆ ๋ถ€์—ฌํ•˜๊ธฐ - ROW_NUMBER(), RANK(), DENSE_RANK()

1. ์ˆœ๋ฒˆ ๋ถ€์—ฌํ•˜๊ธฐย PostgreSQL์—์„œ๋Š” ๊ฐ ๋ฐ์ดํ„ฐ์— ์˜๋ฏธ ์žˆ๋Š” ์ˆœ๋ฒˆ์„ ๋ถ€์—ฌํ•˜๊ธฐ ์œ„ํ•ด ROW_NUMBER(), RANK(), DENSE_RANK() ํ•จ์ˆ˜๋ฅผ ์ œ๊ณตํ•œ๋‹ค.ย ROW_NUMBER() OVER(PARTITION BY * ORDER BY * ) RANK() OVER(PARTITION BY * ORDER BY * ) DENSE_RANK() OVER(PARTITION BY * ORDER BY * ) ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์ž์„ธํ•œ ์‚ฌ์šฉ๋ฒ•์„ ์•Œ์•„๋ณด์ž. (2. ํ…Œ์ŠคํŠธ ํ…Œ์ด๋ธ” & ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ์ฐธ๊ณ ) ์˜ˆ์ œ์—์„œ ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ 1-1. ROW_NUMBER() 1-1-1. ๋‹จ์ผ ๊ทธ๋ฃน ์ˆœ๋ฒˆ ๋ถ€์—ฌ SELECT ROW_NUMBER() OVER (ORDER BY BRAND) AS ROWNUM, * FROM TEST_COMPLEX_GROUP; ...

[PostgreSQL] ๋ฒ„์ „ ํ™•์ธ: ํ•„์š”์„ฑ๊ณผ 4๊ฐ€์ง€ ๋ฐฉ๋ฒ•

[PostgreSQL] ๋ฒ„์ „ ํ™•์ธ: ํ•„์š”์„ฑ๊ณผ 4๊ฐ€์ง€ ๋ฐฉ๋ฒ•

1. ๋ฒ„์ „ ํ™•์ธ์ด ์™œ ํ•„์š”ํ•œ๊ฐ€ PostgreSQL๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ์šด์˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ณด์•ˆ ํŒจ์น˜์™€ ์—…๋ฐ์ดํŠธ๋ฅผ ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. ๋˜ํ•œ ํŠน์ • ๊ธฐ๋Šฅ์ด๋‚˜ ํ˜ธํ™˜์„ฑ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋„ ๋ฒ„์ „ ์ •๋ณด๋ฅผ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ํ˜„์žฌ ๋ฒ„์ „ ๋ฐ ๊ณต์‹ ๋ฌธ์„œ์˜ ๋ฒ„์ „ ๊ด€๋ฆฌ ๋‚ด์šฉ์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ํ™•์ธํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.ย 2. PostgreSQL ๋ฒ„์ „ ํ™•์ธ ๋ฐฉ๋ฒ• 2-1. SQL ์ฟผ๋ฆฌ ์‹คํ–‰: VERSION() PostgreSQL ์ฟผ๋ฆฌ๋กœ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฒ„์ „ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์„œ๋ฒ„์˜ ๋ฒ„์ „์ •๋ณด๋ฅผ ํฌํ•จํ•œ ์ƒ์„ธ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ...

[PostgreSQL] ๊ณ ๊ธ‰ GROUPING ์ „๋žต : SETS, CUBE, ROLLUP์˜ ๊ฐœ๋…, ํšจ๊ณผ์ ์ธ ์‚ฌ์šฉ๋ฒ• ๋ฐ ์ฃผ์˜์‚ฌํ•ญ

[PostgreSQL] ๊ณ ๊ธ‰ GROUPING ์ „๋žต : SETS, CUBE, ROLLUP์˜ ๊ฐœ๋…, ํšจ๊ณผ์ ์ธ ์‚ฌ์šฉ๋ฒ• ๋ฐ ์ฃผ์˜์‚ฌํ•ญ

1. SETS, CUBE, ROLLUP์˜ ๊ฐœ๋… ๋ฐ ์‚ฌ์šฉ๋ฒ• ๊ณ ๊ธ‰ "GROUP BY"์˜ ๊ธฐ๋Šฅ๋“ค๋กœ PostgreSQL์—์„œ๋Š” SETS, CUBE, ROLLUP ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ๊ธฐ๋ณธ์ ์ธ ์ฝ˜์…‰ํŠธ๋Š” ์ผ๋ฐ˜ GROUP BY์™€ ๋™์ผํ•˜๊ฒŒ FROM / WHERE ์ ˆ์—์„œ ์„ ํƒ๋œ ๋ฐ์ดํ„ฐ๋Š” ๊ฐ๊ฐ ์ง€์ •๋œ ๊ทธ๋ฃน์œผ๋กœ GROUP BY ๋˜๊ณ , ๊ฐ ๊ทธ๋ฃน์— ๋Œ€ํ•ด ์ง‘๊ณ„๊ฐ€ ๊ณ„์‚ฐ๋œ ํ›„, ๊ฒฐ๊ณผ๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค. ๋‹ค์Œ์€ ํ…Œ์ŠคํŠธ๋กœ ์‚ฌ์šฉํ•  ํ…Œ์ด๋ธ” ์ •๋ณด์ด๋‹ค. (๋งˆ์ง€๋ง‰ ์žฅ์˜ 4. ํ…Œ์ด๋ธ” & ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ์ฐธ๊ณ ) 1-1. GROUP BY SETS์˜ ๊ฐœ๋… ๋ฐ ์‚ฌ์šฉ๋ฒ• GROUPING SETS์˜ ๊ฐ ํ•˜์œ„ ์š”์†Œ(subsets)๋“ค์€ ํ•˜๋‚˜ ์ด์ƒ์˜ ์—ด ํ˜น์€ ํ‘œํ˜„์‹์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์กฐํ•ฉ์— ๋งž๊ฒŒ ์ง‘๊ณ„ ๊ฒฐ๊ณผ๋ฅผ ๋ณ„๋„๋กœ ๊ณ„์‚ฐํ•œ๋‹ค. ...

[PostgreSQL] UNION, INTERSECT, EXCEPT, SQL ์ฟผ๋ฆฌ ๊ฒฐํ•ฉ์˜ ๊ฐœ๋…, ์‚ฌ์šฉ๋ฒ• ๋ฐ ์ฃผ์˜์‚ฌํ•ญ

[PostgreSQL] UNION, INTERSECT, EXCEPT, SQL ์ฟผ๋ฆฌ ๊ฒฐํ•ฉ์˜ ๊ฐœ๋…, ์‚ฌ์šฉ๋ฒ• ๋ฐ ์ฃผ์˜์‚ฌํ•ญ

1. UNION, INTERSECT, EXCEPT๋ฅผ ํ†ตํ•œ ์ฟผ๋ฆฌ ๊ฒฐํ•ฉ UNION(๊ฒฐํ•ฉ), INTERSECT(๊ต์ฐจ), EXCEPT(์ฐจ์ด) ๊ตฌ๋ฌธ์„ ํ†ตํ•ด ๋‘ ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ๋‹ค. query1 UNION [ALL] query2 query1 INTERSECT [ALL] query2 query1 EXCEPT [ALL] query2 ํ•ด๋‹น ๊ตฌ๋ฌธ๋“ค์„ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋Š” query1, query2๊ฐ€ ๋™์ผํ•œ ๊ฐœ์ˆ˜, ๋™์ผํ•œ type์˜ ์นผ๋Ÿผ์„ ๋ฆฌํ„ดํ•ด์•ผ ํ•œ๋‹ค. 2. UNION query2์˜ ๊ฒฐ๊ณผ๋ฅผ query1์— ์ด์–ด ๋ถ™์ธ๋‹ค. ๊ทธ๋ƒฅ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜์—ฌ distinct์™€ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, UNION ALL์„ ์‚ฌ์šฉํ•˜๋ฉด ์ค‘๋ณต์„ ํฌํ•จํ•˜์—ฌ ์ฟผ๋ฆฌ๋ฅผ ํ•ฉ์นœ๋‹ค. 2-1. UNION ๋‹จ์ผ ์‚ฌ์šฉ 1~5 ๋ฒˆ์งธ ROWS, 4~8๋ฒˆ์งธ ROWS๋ฅผ ํ•ฉ์นœ ํ›„ ์ค‘๋ณต ์ œ๊ฑฐํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ...

[PostgreSQL] ํŽ˜์ด์ง• : OFFSET๊ณผ LIMIT์˜ ์˜ฌ๋ฐ”๋ฅธ ์‚ฌ์šฉ๊ณผ ์ฃผ์˜์ 

[PostgreSQL] ํŽ˜์ด์ง• : OFFSET๊ณผ LIMIT์˜ ์˜ฌ๋ฐ”๋ฅธ ์‚ฌ์šฉ๊ณผ ์ฃผ์˜์ 

1. Limit๊ณผ Offset์˜ ๊ฐœ๋… ๋ฐ ์‚ฌ์šฉ๋ฒ• Limit๊ณผ Offset์€ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ์ค‘ ํŠน์ • ๋ถ€๋ถ„์˜ ROW๋งŒ์„ ์กฐํšŒํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. SELECT select_list FROM table_expression [ ORDER BY ... ] [ LIMIT { number | ALL } ] [ OFFSET number ] ์˜ˆ๋ฅผ ๋“ค์–ด ID์ˆœ์„œ๋กœ ์ •๋ ฌ๋œ ๊ฒฐ๊ณผ ์…‹์—์„œ 21๋ฒˆ์งธ๋ถ€ํ„ฐ 30๋ฒˆ์งธ์˜ ROWS๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. -- 21~30๋ฒˆ์งธ ์—ด ์กฐํšŒ SELECT * FROM TEST_EXPLAIN ORDER BY ID LIMIT 10 OFFSET 20 LIMIT์„ ์ง€์ •ํ•˜๋ฉด ํ•ด๋‹น ๊ฐ’๋งŒํผ์˜ ๊ฒฐ๊ณผ๋งŒ ์ถœ๋ ฅ๋˜๋ฉฐ ์ด ๊ฒฐ๊ณผ ๊ฐ’์ด ๋” ์ ์„ ๊ฒฝ์šฐ ์žˆ๋Š” ๋งŒํผ๋งŒ ์ถœ๋ ฅํ•œ๋‹ค. LIMIT ALL, LIMIT NULL์€ LIMIT์„ ์„ค์ •ํ•˜์ง€ ์•Š์€ ๊ฒƒ (์ „์ฒด ROWS ๋ฆฌํ„ด)๊ณผ ๋™์ผํ•˜๋‹ค. OFFSET์€ ๋ฆฌํ„ด๋˜๋Š” ROWS์˜ ์‹œ์ž‘์ ์„ ์ง€์ •ํ•œ๋‹ค. OFFSET 0, OFFSET NULL์€ OFFSET์„ ์„ค์ •ํ•˜์ง€ ์•Š์€ ๊ฒƒ (์ฒซ ROW๋ถ€ํ„ฐ ๋ฆฌํ„ด)๊ณผ ๋™์ผํ•˜๋‹ค. OFFSET๊ณผ LIMIT์„ ๋‘˜ ๋‹ค ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, LIMIT ์นด์šดํŠธ๋ฅผ ์„ธ๊ธฐ ์ „์— OFFSET๋งŒํผ์˜ ROWS๊ฐ€ย ์•ž์—์„œ ์ƒ๋žต๋œ๋‹ค. 2. ์ฃผ์˜์  LIMIT์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๊ฒฐ๊ณผ ROWS์˜ ์ˆœ์„œ๋ฅผ ์œ ๋‹ˆํฌํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ORDER BY์™€ ํ•จ๊ป˜ ์“ฐ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. ๊ทธ๊ฒŒ ์•„๋‹ˆ๋ผ๋ฉด ์˜ˆ์ƒํ•˜์ง€ ๋ชปํ•œ ๋ถ€๋ถ„ ์ง‘ํ•ฉ์„ ์กฐํšŒํ•˜๊ฒŒ ๋  ์ˆ˜ ์žˆ๋‹ค. ์•ž์˜ ์˜ˆ์‹œ ์ฟผ๋ฆฌ์—์„œ ORDER BY๋ฅผ ๋บ€๋‹ค๋ฉด, 10~20 ๋ฒˆ์งธ๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๊ณ  ํ•ด๋„, ์–ด๋–ค ์ˆœ์„œ์—์„œ์˜ 10~20 ๋ฒˆ์งธ์ธ์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค. ...