๋ฐ์ดํ„ฐ ์‚ฌ์ด์–ธ์Šค 100๋ฒˆ์˜ ๋…ธํฌ(๊ตฌ์กฐํ™” ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌํŽธ)- SQL Part 4 (Q61 to Q80)

๋ฐ์ดํ„ฐ ์‚ฌ์ด์–ธ์Šค
์„ค๋ช…:

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” SQL ์ฟผ๋ฆฌ์ž…๋‹ˆ๋‹ค. ๋‹จ๊ณ„๋ณ„๋กœ ๋ถ„ํ•ดํ•ด ๋ณด์ž.

์ฟผ๋ฆฌ๋Š” %%sql magic ๋ช…๋ น์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š”๋ฐ, ์ด๋Š” Jupyter ๋…ธํŠธ๋ถ์—์„œ ๋‹ค์Œ ์ฝ”๋“œ๊ฐ€ SQL ์ฝ”๋“œ์ž„์„ ์ง€์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋ฉ”์ธ ์ฟผ๋ฆฌ์—์„œ๋Š” customer_id, sum_amount, log_amount๋ผ๋Š” ์„ธ ๊ฐœ์˜ ์ปฌ๋Ÿผ์„ ์„ ํƒํ•œ๋‹ค. ์ด ์ปฌ๋Ÿผ๋“ค์€ ๊ด„ํ˜ธ ์•ˆ์˜ ํ•˜์œ„ ์ฟผ๋ฆฌ์—์„œ ํŒŒ์ƒ๋ฉ๋‹ˆ๋‹ค.

๊ด„ํ˜ธ ์•ˆ์˜ ํ•˜์œ„ ์ฟผ๋ฆฌ์—์„œ๋Š” ๋จผ์ € customer_id๊ฐ€ "Z"๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๋ฅผ ํ•„ํ„ฐ๋งํ•˜์—ฌ ์ œ์™ธํ•œ๋‹ค. ์ด๋Š” NOT LIKE 'Z%'๋ผ๋Š” ์กฐ๊ฑด์— ์˜ํ•ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

ํ•„ํ„ฐ๋ง๋œ ๋ ˆ์ฝ”๋“œ๋Š” GROUP BY ์ ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ customer_id๋กœ ๊ทธ๋ฃนํ™”๋ฉ๋‹ˆ๋‹ค.

SUM ํ•จ์ˆ˜๋Š” ๊ฐ ๊ณ ๊ฐ ID์˜ ์ด ๊ธˆ์•ก์„ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

AS sum_amount ์ ˆ์€ ๊ณ„์‚ฐ๋œ ์ปฌ๋Ÿผ์˜ ์ด๋ฆ„์„ sum_amount๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

ํ•˜์œ„ ์ฟผ๋ฆฌ๋Š” sum_amount_tbl๋กœ ๋ณ„์นญ์ด ์ง€์ •๋œ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ์™ธ๋ถ€ ์ฟผ๋ฆฌ๋Š” customer_id, sum_amount, sum_amount์— 0.5๋ฅผ ๋”ํ•œ ๋Œ€์ˆ˜(base e)๋ฅผ ์„ ํƒํ•œ๋‹ค. ์ด๊ฒƒ์€ LOG ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ„์‚ฐ๋˜๋ฉฐ, log_amount๋ผ๋Š” ๋ณ„์นญ์ด ๋ถ™๋Š”๋‹ค.

๊ฒฐ๊ณผ๋Š” LIMIT ๊ตฌ๋ฌธ์œผ๋กœ 10ํ–‰์œผ๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.
ย 
์„ค๋ช…:

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” SQL ์ฟผ๋ฆฌ์ž…๋‹ˆ๋‹ค. ๋‹จ๊ณ„๋ณ„๋กœ ๋ถ„ํ•ดํ•ด ๋ณด์ž.

์ฟผ๋ฆฌ๋Š” %%sql magic ๋ช…๋ น์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š”๋ฐ, ์ด๋Š” Jupyter ๋…ธํŠธ๋ถ์—์„œ ๋‹ค์Œ ์ฝ”๋“œ๊ฐ€ SQL ์ฝ”๋“œ์ž„์„ ์ง€์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋ฉ”์ธ ์ฟผ๋ฆฌ์—์„œ๋Š” customer_id, sum_amount, log_amount๋ผ๋Š” ์„ธ ๊ฐœ์˜ ์ปฌ๋Ÿผ์„ ์„ ํƒํ•œ๋‹ค. ์ด ์ปฌ๋Ÿผ๋“ค์€ ๊ด„ํ˜ธ ์•ˆ์˜ ํ•˜์œ„ ์ฟผ๋ฆฌ์—์„œ ํŒŒ์ƒ๋ฉ๋‹ˆ๋‹ค.

๊ด„ํ˜ธ ์•ˆ์˜ ํ•˜์œ„ ์ฟผ๋ฆฌ์—์„œ๋Š” ๋จผ์ € customer_id๊ฐ€ "Z"๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๋ฅผ ํ•„ํ„ฐ๋งํ•˜์—ฌ ์ œ์™ธํ•œ๋‹ค. ์ด๋Š” NOT LIKE 'Z%'๋ผ๋Š” ์กฐ๊ฑด์— ์˜ํ•ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

ํ•„ํ„ฐ๋ง๋œ ๋ ˆ์ฝ”๋“œ๋Š” GROUP BY ์ ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ customer_id๋กœ ๊ทธ๋ฃนํ™”๋ฉ๋‹ˆ๋‹ค.

SUM ํ•จ์ˆ˜๋Š” ๊ฐ ๊ณ ๊ฐ ID์˜ ์ด ๊ธˆ์•ก์„ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

AS sum_amount ์ ˆ์€ ๊ณ„์‚ฐ๋œ ์ปฌ๋Ÿผ์˜ ์ด๋ฆ„์„ sum_amount๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

ํ•˜์œ„ ์ฟผ๋ฆฌ๋Š” sum_amount_tbl๋กœ ๋ณ„์นญ์ด ์ง€์ •๋œ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ์™ธ๋ถ€ ์ฟผ๋ฆฌ๋Š” customer_id, sum_amount, sum_amount์˜ ์ž์—ฐ๋Œ€์ˆ˜(๋ฐ”๋‹ฅ e)์— 0.5๋ฅผ ๋”ํ•œ ๊ฐ’์„ ์„ ํƒํ•œ๋‹ค. ์ด๊ฒƒ์€ LN ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ„์‚ฐ๋˜๋ฉฐ, log_amount๋ผ๋Š” ๋ณ„์นญ์ด ๋ถ™๋Š”๋‹ค.

๊ฒฐ๊ณผ๋Š” LIMIT ๊ตฌ๋ฌธ์œผ๋กœ 10์ค„๋กœ ์ œํ•œ๋œ๋‹ค.
ย 
์„ค๋ช…:

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” SQL ์ฟผ๋ฆฌ์ž…๋‹ˆ๋‹ค. ๋‹จ๊ณ„๋ณ„๋กœ ๋ถ„ํ•ดํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ฟผ๋ฆฌ๋Š” %%sql ๋งค์ง ๋ช…๋ น์œผ๋กœ ์‹œ์ž‘ํ•˜๋ฉฐ, ์ด๋Š” Jupyter ๋…ธํŠธ๋ถ์—์„œ ๋‹ค์Œ ์ฝ”๋“œ๊ฐ€ SQL ์ฝ”๋“œ์ž„์„ ์ง€์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋ฉ”์ธ ์ฟผ๋ฆฌ์—์„œ๋Š” product_cd, unit_price, unit_cost, unit_profit์˜ 4๊ฐœ ์ปฌ๋Ÿผ์„ ์„ ํƒํ•œ๋‹ค. ์ด ์ปฌ๋Ÿผ๋“ค์€ product ํ…Œ์ด๋ธ”์—์„œ ํŒŒ์ƒ๋œ๋‹ค.

FROM ์ ˆ์€ ์ œํ’ˆ ํ…Œ์ด๋ธ”์„ ์ง€์ •ํ•œ๋‹ค.

LIMIT ์ ˆ์€ ์ฟผ๋ฆฌ๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ–‰ ์ˆ˜๋ฅผ 10์œผ๋กœ ์ œํ•œํ•œ๋‹ค.

์ด ์ฟผ๋ฆฌ์—์„œ๋Š” ๋‹จ๊ฐ€์—์„œ ๋‹จ๊ฐ€๋ฅผ ๋นผ์„œ ๋‹จ์œ„ ์ˆ˜์ต์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” - ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์—๋Š” product ํ…Œ์ด๋ธ”์˜ ์ฒ˜์Œ 10๊ฐœ์˜ ํ–‰์ธ product_cd, unit_price, unit_cost, unit_profit์ด ํฌํ•จ๋œ๋‹ค.

์ „์ฒด์ ์œผ๋กœ ์ด ์ฟผ๋ฆฌ๋Š” ์„ ํƒํ•œ ์ œํ’ˆ์˜ ๊ฐ€๊ฒฉ, ๋น„์šฉ ๋ฐ ์ด์ต์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์–ป๋Š”๋‹ค.

ย 

์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” SQL์„ ์‚ฌ์šฉํ•˜์—ฌ 'product'๋ผ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์˜ ์ƒ์œ„ 10๊ฐœ ์ƒํ’ˆ์˜ ํ‰๊ท  ๋‹จ๊ฐ€ ์ˆ˜์ต๋ฅ ์„ ์กฐํšŒํ•˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์ฝ”๋“œ์˜ ๊ฐ ๋ถ€๋ถ„์— ๋Œ€ํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค.

"%%sql"์€ Jupyter notebook์˜ ๋งค์ง ๋ช…๋ น์–ด๋กœ, ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ SQL๋กœ ํ•ด์„ํ•˜๋„๋ก ๋…ธํŠธ๋ถ์— ์ง€์‹œํ•ฉ๋‹ˆ๋‹ค.

"SELECT"๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค๋Š” ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ด๋Š” SQL ํ‚ค์›Œ๋“œ์ž…๋‹ˆ๋‹ค.

"AVG"๋Š” ์ฃผ์–ด์ง„ ๊ฐ’ ์ง‘ํ•ฉ์˜ ํ‰๊ท ์„ ๊ณ„์‚ฐํ•˜๋Š” SQL ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

"((unit_price * 1.0 - unit_cost) / unit_price)"๋Š” ๊ฐ ์ƒํ’ˆ์˜ ๋‹จ์œ„๋‹น ์ˆ˜์ต๋ฅ ์„ ๊ณ„์‚ฐํ•˜๋Š” ๊ณ„์‚ฐ์‹์ž…๋‹ˆ๋‹ค. ๋‹จ๊ฐ€์—์„œ ๋‹จ๊ฐ€๋ฅผ ๋นผ๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋‹จ๊ฐ€๋กœ ๋‚˜๋ˆ„๋Š” ๋ฐฉ์‹์ด๋ฉฐ, 1.0์˜ ๊ณฑ์…ˆ์€ ๋‚˜๋ˆ—์…ˆ์ด ์ •์ˆ˜๊ฐ€ ์•„๋‹Œ ๋ถ€๋™์†Œ์ˆ˜์  ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด 1.0์„ ๊ณฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

"AS unit_profit_rate"๋Š” ๊ณ„์‚ฐ๋œ ๊ฐ’์„ "unit_profit_rate"๋ผ๋Š” ์ปฌ๋Ÿผ์— ๋Œ€์ž…ํ•ฉ๋‹ˆ๋‹ค.

"FROM product"๋Š” "product" ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๊ฒƒ์„ ์ง€์ •ํ•œ๋‹ค.

"LIMIT 10"์€ ๋ฐ˜ํ™˜๋˜๋Š” ํ–‰ ์ˆ˜๋ฅผ 10ํ–‰์œผ๋กœ ์ œํ•œํ•œ๋‹ค. ์ฆ‰, ์–ด๋–ค ๊ธฐ์ค€(์ฝ”๋“œ ์Šค๋‹ˆํŽซ์—์„œ๋Š” ์ง€์ •๋˜์ง€ ์•Š์Œ)์— ๋”ฐ๋ผ ์ƒ์œ„ 10๊ฐœ ์ œํ’ˆ์˜ ๊ฒฐ๊ณผ๋งŒ ํ‘œ์‹œํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

ย 

์„ค๋ช…:

์ด ์ฝ”๋“œ์—์„œ๋Š” SQL์„ ์‚ฌ์šฉํ•˜์—ฌ "product"๋ผ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์˜ ์ˆ˜์ •๋œ ๋ฒ„์ „์„ ์กฐํšŒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜์ • ๋‚ด์šฉ์€ ๊ฐ ์ƒํ’ˆ์˜ ๋‹จ๊ฐ€์—์„œ ์ƒˆ๋กœ์šด ๊ฐ€๊ฒฉ์„ ์‚ฐ์ถœํ•˜๊ณ , ์ด ์ƒˆ๋กœ์šด ๊ฐ€๊ฒฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ์ด์œค์œจ์„ ์‚ฐ์ถœํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์ฝ”๋“œ์˜ ๊ฐ ๋ถ€๋ถ„์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

"%%sql"์€ Jupyter notebook์˜ ๋งค์ง ๋ช…๋ น์œผ๋กœ, ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ SQL๋กœ ํ•ด์„ํ•˜๋„๋ก ๋…ธํŠธ๋ถ์— ์ง€์‹œํ•œ๋‹ค.

"WITH new_price_tbl AS (...)" ๋Š” "new_price_tbl"์ด๋ผ๋Š” CTE(Common Table Expression)๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํ›„์† ์ฟผ๋ฆฌ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ•˜์œ„ ์ฟผ๋ฆฌ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

"( SELECT product_cd, unit_price, unit_cost, TRUNC(unit_cost / 0.7) AS new_price FROM product )"๋Š” 'product' ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•˜๊ณ , ๋‹จ๊ฐ€๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ƒˆ๋กœ์šด ๊ฐ€๊ฒฉ์„ ๊ณ„์‚ฐํ•˜์—ฌ 'new price'๋ผ๋Š” ์ƒˆ๋กœ์šด ์—ด์— ํ• ๋‹นํ•˜๋Š” ํ•˜์œ„ ์ฟผ๋ฆฌ์ด๋ฉฐ, 'TRUNC' ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ„์‚ฐ๋œ ์ƒˆ๋กœ์šด ๊ฐ€๊ฒฉ์„ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ •์ˆ˜๋กœ ๋ฐ˜์˜ฌ๋ฆผํ•˜๊ณ  ์žˆ๋‹ค. ์ด๋Š” ํšŒ์‚ฌ๊ฐ€ ์ œํ’ˆ ๊ฐ€๊ฒฉ์„ ์ •์ˆ˜๋กœ ๊ฒฐ์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋Š” ๊ฐ€์ •์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค.

"SELECT *, (new_price - unit_cost) / new_price AS new_profit_rate FROM new_price_tbl LIMIT 10 ;"์€ "new_price_tbl"์˜ ๋ชจ๋“  ์—ด์„ ์„ ํƒํ•˜๋Š” ๋ฉ”์ธ ์ฟผ๋ฆฌ์ด๋‹ค. ์˜ ์ƒˆ๋กœ์šด ์ˆ˜์ต๋ฅ ์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์ˆ˜์ต๋ฅ ์€ ์ƒˆ๋กœ์šด ๊ฐ€๊ฒฉ์—์„œ ๋‹จ๊ฐ€๋ฅผ ๋นผ๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ƒˆ๋กœ์šด ๊ฐ€๊ฒฉ์œผ๋กœ ๋‚˜๋ˆ„์–ด 'new_profit_rate'๋ผ๋Š” ์ƒˆ๋กœ์šด ์—ด์— ๋Œ€์ž…ํ•˜์—ฌ ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์–ด๋–ค ๊ธฐ์ค€(์ฝ”๋“œ ์Šค๋‹ˆํŽซ์—์„œ ์ง€์ •ํ•˜์ง€ ์•Š์€)์— ๋”ฐ๋ผ ์ƒ์œ„ 10๊ฐœ ์ƒํ’ˆ์˜ ๊ฒฐ๊ณผ๋งŒ ํ‘œ์‹œํ•˜๊ณ  ์‹ถ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.
ย 
์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” SQL๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ, 'new_price_tbl'์ด๋ผ๋Š” ๊ณตํ†ต ํ…Œ์ด๋ธ” ํ‘œํ˜„์‹(CTE)์„ ์‚ฌ์šฉํ•˜์—ฌ 'product'๋ผ๋Š” ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ๋Š” ๊ฐ ์ƒํ’ˆ์˜ ๋‹จ๊ฐ€๋ฅผ 0.7๋กœ ๋‚˜๋ˆ„์–ด ์ƒˆ๋กœ์šด ๊ฐ€๊ฒฉ์„ ๊ณ„์‚ฐํ•˜๊ณ , ์ƒˆ๋กœ์šด ๊ฐ€๊ฒฉ์—์„œ ๋‹จ๊ฐ€๋ฅผ ๋นผ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ƒˆ๋กœ์šด ๊ฐ€๊ฒฉ์œผ๋กœ ๋‚˜๋ˆ„์–ด ์ƒˆ๋กœ์šด ์ด์œค์œจ์„ ๊ณ„์‚ฐํ•œ๋‹ค.

์•„๋ž˜๋Š” ์ด ์ฝ”๋“œ์˜ ๋‹จ๊ณ„๋ณ„ ๋ถ„์„์ž…๋‹ˆ๋‹ค.

WITH new_price_tbl AS (...) : ๊ด„ํ˜ธ๋กœ ๋‘˜๋Ÿฌ์‹ธ์ธ SELECT ๋ฌธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์ €์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” 'new_price_tbl'์ด๋ผ๋Š” ๊ณตํ†ต ํ…Œ์ด๋ธ” ํ‘œํ˜„์‹(CTE)์„ ์ •์˜ํ•˜๊ณ  ์žˆ๋‹ค.

SELECT product_cd, unit_price, unit_cost, ROUND(unit_cost / 0.7) AS new_price FROM product: ์ƒํ’ˆ ์ฝ”๋“œ, ๋‹จ๊ฐ€, ๋‹จ๊ฐ€๋ฅผ ์„ ํƒํ•˜๊ณ  ๊ฐ ์ƒํ’ˆ์˜ ๋‹จ๊ฐ€๋ฅผ 0.7๋กœ ๋‚˜๋ˆˆ ํ›„ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜์˜ฌ๋ฆผํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ฐ€๊ฒฉ์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€๊ฒฉ์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

SELECT *, (new_price - unit_cost) / new_price AS new_profit_rate FROM new_price_tbl LIMIT 10: 'new_price_tbl' CTE์—์„œ ๋ชจ๋“  ์ปฌ๋Ÿผ์„ ์„ ํƒํ•˜๊ณ  ์ƒˆ ๊ฐ€๊ฒฉ์—์„œ ๋‹จ๊ฐ€๋ฅผ ๋บ€ ํ›„, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ƒˆ๋กœ์šด ๊ฐ€๊ฒฉ์œผ๋กœ ๋‚˜๋ˆ„์–ด ์ƒˆ๋กœ์šด ์ด์œค์œจ์„ ๊ณ„์‚ฐํ•œ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ์ถœ๋ ฅ์„ ์ฒ˜์Œ 10์ค„๋กœ ์ œํ•œํ•˜๊ณ  ์žˆ๋‹ค.

์š”์•ฝํ•˜๋ฉด, ์ด ์ฝ”๋“œ๋Š” CTE๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์ €์žฅํ•˜๊ณ , ๊ทธ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์‚ฐ์ˆ  ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ๊ฐ ์ƒํ’ˆ์˜ ์ƒˆ๋กœ์šด ๊ฐ€๊ฒฉ๊ณผ ์ƒˆ๋กœ์šด ์ด์œค์œจ์„ ๊ณ„์‚ฐํ•˜๊ณ  ์žˆ๋‹ค.
ย 
์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” ์ด์ „ ์ฝ”๋“œ์™€ ๋น„์Šทํ•˜์ง€๋งŒ ์ƒˆ ๊ฐ€๊ฒฉ์„ ๋ฐ˜์˜ฌ๋ฆผํ•˜๋Š” ๋Œ€์‹  CEIL ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ •์ˆ˜๋กœ ๋ฐ˜์˜ฌ๋ฆผํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜๋Š” ์ฝ”๋“œ์˜ ๋‹จ๊ณ„๋ณ„ ๋ถ„์„์ž…๋‹ˆ๋‹ค.

WITH new_price_tbl AS (...) : ๊ด„ํ˜ธ๋กœ ๋‘˜๋Ÿฌ์‹ธ์ธ SELECT ๋ฌธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์ €์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” 'new_price_tbl'์ด๋ผ๋Š” ๊ณตํ†ต ํ…Œ์ด๋ธ” ํ‘œํ˜„์‹(CTE)์„ ์ •์˜ํ•˜๊ณ  ์žˆ๋‹ค.

SELECT product_cd, unit_price, unit_cost, CEIL(unit_cost / 0.7) AS new_price FROM product: ์ƒํ’ˆ ์ฝ”๋“œ, ๋‹จ๊ฐ€, ๋‹จ๊ฐ€๋ฅผ ์„ ํƒํ•˜๊ณ  ๊ฐ ์ƒํ’ˆ์˜ ๋‹จ๊ฐ€๋ฅผ 0.7๋กœ ๋‚˜๋ˆˆ ํ›„, CEIL ํ•จ์ˆ˜๋กœ ์†Œ์ˆ˜์  ์ดํ•˜๋ฅผ ๋ฐ˜์˜ฌ๋ฆผํ•˜์—ฌ ๋ฐ˜์˜ฌ๋ฆผํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ฐ€๊ฒฉ์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

SELECT *, (new_price - unit_cost) / new_price AS new_profit_rate FROM new_price_tbl LIMIT 10: 'new_price_tbl' CTE์—์„œ ๋ชจ๋“  ์ปฌ๋Ÿผ์„ ์„ ํƒํ•˜๊ณ , ์ƒˆ ๊ฐ€๊ฒฉ์—์„œ ๋‹จ๊ฐ€๋ฅผ ๋บ€ ํ›„, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ƒˆ ๊ฐ€๊ฒฉ์œผ๋กœ ๋‚˜๋ˆ„์–ด ์ƒˆ๋กœ์šด ์ˆ˜์ต๋ฅ ์„ ๊ณ„์‚ฐํ•œ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ์ถœ๋ ฅ์„ ์ฒ˜์Œ 10์ค„๋กœ ์ œํ•œํ•˜๊ณ  ์žˆ๋‹ค.

์š”์•ฝํ•˜๋ฉด, ์ด ์ฝ”๋“œ๋Š” CTE๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์ €์žฅํ•˜๊ณ , ๊ทธ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์‚ฐ์ˆ  ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ๊ฐ ์ƒํ’ˆ์˜ ์ƒˆ๋กœ์šด ๊ฐ€๊ฒฉ๊ณผ ์ƒˆ๋กœ์šด ์ด์œค์œจ์„ ๊ณ„์‚ฐํ•˜๊ณ  ์žˆ๋‹ค. ๋‹จ, ์ƒˆ๋กœ์šด ๊ฐ€๊ฒฉ์€ ์ด์ „ ์ฝ”๋“œ์ฒ˜๋Ÿผ ๋ฐ˜์˜ฌ๋ฆผํ•˜์ง€ ์•Š๊ณ  CEIL ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ •์ˆ˜๋กœ ๋ฐ˜์˜ฌ๋ฆผํ•œ๋‹ค.
ย 
์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” SQL๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ, 'product'๋ผ๋Š” ์ด๋ฆ„์˜ ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ์—์„œ๋Š” ์ƒํ’ˆ ์ฝ”๋“œ, ๋‹จ๊ฐ€๋ฅผ ์„ ํƒํ•˜๊ณ  ๊ฐ ์ƒํ’ˆ์˜ ๋ถ€๊ฐ€์„ธ ํฌํ•จ ๊ฐ€๊ฒฉ์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ๋‹จ๊ฐ€์— 1.1์„ ๊ณฑํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜์˜ฌ๋ฆผํ•˜์—ฌ ์†Œ์ˆ˜์  ์ดํ•˜๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์ฝ”๋“œ์˜ ๋‹จ๊ณ„๋ณ„ ๋ถ„์„์ž…๋‹ˆ๋‹ค.

SELECT product_cd, unit_price, TRUNC(unit_price * 1.1) AS tax_price FROM product: ์ƒํ’ˆ ์ฝ”๋“œ, ๋‹จ๊ฐ€๋ฅผ ์„ ํƒํ•˜์—ฌ ๊ฐ ์ƒํ’ˆ์˜ ์„ธ๊ธˆ ํฌํ•จ ๊ฐ€๊ฒฉ์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ๋‹จ๊ฐ€์— 1.1์„ ๊ณฑํ•˜๊ณ  TRUNC ํ•จ์ˆ˜๋กœ ์†Œ์ˆ˜์  ์ดํ•˜๋ฅผ ๋ฐ˜์˜ฌ๋ฆผํ•ฉ๋‹ˆ๋‹ค.

FROM product: ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•  '์ƒํ’ˆ' ํ…Œ์ด๋ธ”์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

LIMIT 10: ์ถœ๋ ฅ์„ ์ฒ˜์Œ 10์ค„๋กœ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.

์š”์•ฝํ•˜๋ฉด, ์ด ์ฝ”๋“œ์—์„œ๋Š” ๊ฐ ์ƒํ’ˆ์˜ ๋‹จ๊ฐ€์— 1.1์„ ๊ณฑํ•˜์—ฌ ๋ถ€๊ฐ€์„ธ ํฌํ•จ ๊ฐ€๊ฒฉ์„ ๊ณ„์‚ฐํ•˜๊ณ , TRUNC ํ•จ์ˆ˜๋กœ ์†Œ์ˆ˜์  ์ดํ•˜๋ฅผ ๋ฐ˜์˜ฌ๋ฆผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” SQL๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ, 'amount_all'๊ณผ 'amount_07'์ด๋ผ๋Š” ๋‘ ๊ฐœ์˜ ๊ณตํ†ต ํ…Œ์ด๋ธ” ํ‘œํ˜„์‹(CTE)์„ ์‚ฌ์šฉํ•˜์—ฌ 'receive'์™€ 'product'๋ผ๋Š” ๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ์ด ์ฝ”๋“œ๋Š” ๊ฐ ๊ณ ๊ฐ์ด ์‚ฌ์šฉํ•œ ๊ธˆ์•ก์˜ ํ•ฉ๊ณ„์™€ ๋ฉ”์ด์ € ์นดํ…Œ๊ณ ๋ฆฌ ์ฝ”๋“œ๊ฐ€ '07'์ธ ์ƒํ’ˆ์— ์‚ฌ์šฉํ•œ ๊ธˆ์•ก์˜ ํ•ฉ๊ณ„๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‘ CTE๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ๊ฐ ๊ณ ๊ฐ์˜ ์นดํ…Œ๊ณ ๋ฆฌ '07' ์ƒํ’ˆ์˜ ํŒ๋งค์œจ์„ ๊ณ„์‚ฐํ•œ๋‹ค.

๋‹ค์Œ์€ ์ฝ”๋“œ์˜ ๋‹จ๊ณ„๋ณ„ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

WITH amount_all AS(...) ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ด„ํ˜ธ๋กœ ๋‘˜๋Ÿฌ์‹ธ์ธ SELECT ๋ฌธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์ €์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” 'amount_all'์ด๋ผ๋Š” ๊ณตํ†ต ํ…Œ์ด๋ธ” ํ‘œํ˜„์‹(CTE)์„ ์ •์˜ํ•˜๊ณ  ์žˆ๋‹ค.

SELECT customer_id, SUM(amount) AS sum_all FROM receipt GROUP BY customer_id: 'receiption' ํ…Œ์ด๋ธ”์—์„œ ๊ณ ๊ฐ ID์™€ ๊ฐ ๊ณ ๊ฐ์ด ์‚ฌ์šฉํ•œ ๊ธˆ์•ก์˜ ํ•ฉ๊ณ„๋ฅผ ์„ ํƒํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๊ณ ๊ฐ ID๋ณ„๋กœ ๊ทธ๋ฃนํ™”ํ•œ๋‹ค. ๊ทธ๋ฃนํ™”ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ, amount_07 AS(...) ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ด„ํ˜ธ๋กœ ๋‘˜๋Ÿฌ์‹ธ์ธ SELECT ๋ฌธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์ €์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” 'amount_07'์ด๋ผ๋Š” ์ด๋ฆ„์˜ ๋˜ ๋‹ค๋ฅธ CTE๋ฅผ ์ •์˜ํ•˜๊ณ  ์žˆ๋‹ค.

SELECT r.customer_id, SUM(r.amount) AS sum_07 FROM receipt r JOIN product p ON r.product_cd = p.product_cd WHERE p.category_major_cd = '07' GROUP BY customer_id: ๊ณ ๊ฐ ID์™€ ๋ฉ”์ด์ € ์นดํ…Œ๊ณ ๋ฆฌ ์ฝ”๋“œ๊ฐ€ '07'์ธ ์ œํ’ˆ์— ์ง€์ถœ๋œ ๊ธˆ์•ก์˜ ํ•ฉ๊ณ„๋ฅผ 'receiport'์™€ 'product' ํ…Œ์ด๋ธ”์—์„œ ์„ ํƒํ•˜๊ณ , ์ œํ’ˆ ์ฝ”๋“œ์—์„œ ๋‘ ํ…Œ์ด๋ธ”์„ ๊ฒฐํ•ฉํ•˜๊ณ , ๋ฉ”์ด์ € ์นดํ…Œ๊ณ ๋ฆฌ ์ฝ”๋“œ '07'๋กœ ์ œํ’ˆ์„ ํ•„ํ„ฐ๋งํ•œ ํ›„ ๊ณ ๊ฐ ID๋กœ ๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋ฃนํ™”ํ•œ๋‹ค.

SELECT amount_all.customer_id, sum_all, sum_07, sum_07, sum_07 * 1.0 / sum_all AS sales_rate FROM amount_all JOIN amount_07 ON amount_all.customer_id = amount_07. customer_id LIMIT 10: ๊ณ ๊ฐ ID, ๊ฐ ๊ณ ๊ฐ์ด ์‚ฌ์šฉํ•œ ๋ชจ๋“  ๊ธˆ์•ก์˜ ํ•ฉ๊ณ„, ๊ฐ ๊ณ ๊ฐ์ด ์นดํ…Œ๊ณ ๋ฆฌ '07' ์ œํ’ˆ์— ์‚ฌ์šฉํ•œ ๊ธˆ์•ก์˜ ํ•ฉ๊ณ„, ์นดํ…Œ๊ณ ๋ฆฌ '07' ์ œํ’ˆ์— ์‚ฌ์šฉํ•œ ๊ธˆ์•ก์˜ ํ•ฉ๊ณ„๋ฅผ ๊ณ ๊ฐ์ด ์‚ฌ์šฉํ•œ ๋ชจ๋“  ๊ธˆ์•ก์˜ ํ•ฉ๊ณ„๋กœ ๋‚˜๋ˆˆ ๊ฐ’์„ ํ†ตํ•ด ๊ฐ ๊ณ ๊ฐ์˜ ์นดํ…Œ๊ณ ๋ฆฌ '07' ์ œํ’ˆ์˜ ํŒ๋งค์œจ์„ ์„ ํƒํ•œ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ๊ณ ๊ฐ ID๋กœ 2๊ฐœ์˜ CTE๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ์ถœ๋ ฅ์„ ์ฒ˜์Œ 10์ค„๋กœ ์ œํ•œํ•œ๋‹ค.

์š”์•ฝํ•˜๋ฉด, ์ด ์ฝ”๋“œ๋Š” ๋จผ์ € ๊ฐ ๊ณ ๊ฐ์˜ ์ „์ฒด ์†Œ๋น„ ๊ธˆ์•ก์˜ ํ•ฉ๊ณ„์™€ ๊ฐ ๊ณ ๊ฐ์˜ "07"์ œํ’ˆ์— ๋Œ€ํ•œ ์†Œ๋น„ ๊ธˆ์•ก์˜ ํ•ฉ๊ณ„๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , ํ›„์ž๋ฅผ ์ „์ž๋กœ ๋‚˜๋ˆ„์–ด ๊ฐ ๊ณ ๊ฐ์˜ "07"์ œํ’ˆ์˜ ํŒ๋งค์œจ์„ ๊ณ„์‚ฐํ•œ๋‹ค. ์ด๋Š” ๋‘ ๊ฐœ์˜ CTE๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์ €์žฅํ•˜๊ณ , ๊ทธ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์‚ฐ์ˆ  ์—ฐ์‚ฐ๊ณผ ๊ฒฐํ•ฉ์„ ์ˆ˜ํ–‰ํ•จ์œผ๋กœ์จ ์‹คํ˜„๋œ๋‹ค.
ย 
์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” SQL๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ, 'receipt_distinct'๋ผ๋Š” ๊ณตํ†ต ํ…Œ์ด๋ธ” ํ‘œํ˜„์‹(CTE)์„ ์‚ฌ์šฉํ•˜์—ฌ 'receipt'์™€ 'customer'๋ผ๋Š” ๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ๋Š” ๊ณ ๊ฐ์˜ ์‹ ์ฒญ์ผ๊ณผ ํ•ด๋‹น ๊ณ ๊ฐ์ด ๋ณ„๋„์˜ ํŒ๋งค์ผ ์‚ฌ์ด์— ๊ฒฝ๊ณผํ•œ ์ผ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ์žˆ๋‹ค.

๋‹ค์Œ์€ ์ฝ”๋“œ์˜ ๋‹จ๊ณ„๋ณ„ ๋ถ„์„์ž…๋‹ˆ๋‹ค.

WITH receipt_distinct AS(...) ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ด„ํ˜ธ๋กœ ๋‘˜๋Ÿฌ์‹ธ์ธ SELECT ๋ฌธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์ €์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” 'receipt_distinct'๋ผ๋Š” ์ด๋ฆ„์˜ ๊ณตํ†ต ํ…Œ์ด๋ธ” ํ‘œํ˜„์‹(CTE)์„ ์ •์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

SELECT distinct customer_id, sales_ymd FROM receipt: 'receipt' ํ…Œ์ด๋ธ”์—์„œ distinct customer ID์™€ sales year-month-day๋ฅผ ์„ ํƒํ•œ๋‹ค.

SELECT c.customer_id, r.sales_ymd, c.application_date, EXTRACT(DAY FROM (TO_TIMESTAMP(CAST(r.sales_ymd AS VARCHAR), 'YYYYMMDD') - TO_THEMESTAMP(c.application_date, EXTRACT(DAY FROM (TO_TIMESTAMP(CAST(r.sales_ymd AS VARCHAR), 'YYYYMMDD') - TO_THEMESTAMP(c.application_date)) TIMESTAMP(c.application_date, 'YYYYMMDD'))) )) AS elapsed_days FROM receipt_distinct r JOIN customer c ON r.customer_id = c.customer_id LIMIT 10: ์ด ๋Š” ๊ณ ๊ฐ ID, ํŒ๋งค์ผ์ž, ์‹ ์ฒญ์ผ, ๊ณ ๊ฐ์˜ ์‹ ์ฒญ์ผ๋กœ๋ถ€ํ„ฐ ํ•ด๋‹น ๊ณ ๊ฐ์ด ํŒ๋งคํ•œ ๋ช…์„ธ์„œ ๋‚ ์งœ๊นŒ์ง€์˜ ๊ฒฝ๊ณผ์ผ์ˆ˜๋ฅผ ์„ ํƒํ•œ๋‹ค. ๊ฒฝ๊ณผ์ผ์ˆ˜ ๊ณ„์‚ฐ์€ ํŒ๋งค์ผ์ž์™€ ์‹ ์ฒญ์ผ์„ ํƒ€์ž„์Šคํƒฌํ”„๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๊ทธ ์ฐจ์ด๋ฅผ ์ผ์ˆ˜๋กœ ๊ณ„์‚ฐํ•œ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ 'receipt_distinct' CTE์™€ 'customer' ํ…Œ์ด๋ธ”์„ ๊ณ ๊ฐ ID๋กœ ๊ฒฐํ•ฉํ•˜๊ณ  ์ถœ๋ ฅ์„ ์ฒ˜์Œ 10์ค„๋กœ ์ œํ•œํ•œ๋‹ค.

์š”์•ฝํ•˜๋ฉด, ์ด ์ฝ”๋“œ์—์„œ๋Š” ๋จผ์ € 'receipt' ํ…Œ์ด๋ธ”์—์„œ ๊ณ ๊ฐ ID์™€ ๋งค์ถœ ์—ฐ/์›”/์ผ์„ ์„ ํƒํ•˜๊ณ , ์ด๋ฅผ 'customer' ํ…Œ์ด๋ธ”๊ณผ ๊ฒฐํ•ฉํ•˜์—ฌ ๊ณ ๊ฐ์˜ ์‹ ์ฒญ์ผ์„ ๊ฐ€์ ธ์™€์„œ ๊ณ ๊ฐ์˜ ์‹ ์ฒญ์ผ๊ณผ ํ•ด๋‹น ๊ณ ๊ฐ์˜ ๊ฐœ๋ณ„ ๋งค์ถœ์ผ ์‚ฌ์ด์— ๊ฒฝ๊ณผํ•œ ์ผ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ์žˆ๋‹ค. ๋‹ค์Œ์œผ๋กœ ํŒ๋งค์ผ๊ณผ ์‹ ์ฒญ์ผ์„ ํƒ€์ž„์Šคํƒฌํ”„๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๊ทธ ์ฐจ์ด๋ฅผ ์ผ์ˆ˜๋กœ ๊ณ„์‚ฐํ•˜๋Š” ๊ณ„์‚ฐ์ด ์ด๋ฃจ์–ด์ง„๋‹ค. ์ด๋Š” CTE๋ฅผ ์ด์šฉํ•ด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์ €์žฅํ•˜๊ณ , ํ•ด๋‹น ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์‚ฐ์ˆ  ์—ฐ์‚ฐ๊ณผ ๊ฒฐํ•ฉ์„ ์ˆ˜ํ–‰ํ•จ์œผ๋กœ์จ ์‹คํ˜„๋œ๋‹ค.

ย 

์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” SQL๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ, 'receive_distinct'์™€ 'time_age_tbl'์ด๋ผ๋Š” ๋‘ ๊ฐœ์˜ ๊ณตํ†ต ํ…Œ์ด๋ธ” ํ‘œํ˜„์‹(CTE)์„ ์‚ฌ์šฉํ•˜์—ฌ 'receive'์™€ 'customer'๋ผ๋Š” ๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ์ด ์ฝ”๋“œ๋Š” ๊ณ ๊ฐ์˜ ์‹ ์ฒญ์ผ๊ณผ ํ•ด๋‹น ๊ณ ๊ฐ์ด ๋ณ„๋„์˜ ํŒ๋งค๋ฅผ ํ•œ ๋‚ ์งœ ์‚ฌ์ด์˜ ๊ฒฝ๊ณผ ๊ฐœ์›” ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.

๋‹ค์Œ์€ ์ฝ”๋“œ์˜ ๋‹จ๊ณ„๋ณ„ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

WITH receipt_distinct AS (...) : ๊ด„ํ˜ธ๋กœ ๋‘˜๋Ÿฌ์‹ธ์ธ SELECT ๋ฌธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์ €์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” 'receipt_distinct'๋ผ๋Š” ์ด๋ฆ„์˜ ๊ณตํ†ต ํ…Œ์ด๋ธ” ํ‘œํ˜„์‹(CTE)์„ ์ •์˜ํ•˜๊ณ  ์žˆ๋‹ค.

SELECT DISTINCT customer_id, sales_ymd FROM receipt: 'receipt' ํ…Œ์ด๋ธ”์—์„œ distinct customer ID์™€ sales year-month-day๋ฅผ ์„ ํƒํ•œ๋‹ค.

WITH time_age_tbl AS (...) : ์ด๊ฒƒ์€ ๊ด„ํ˜ธ๋กœ ๋‘˜๋Ÿฌ์‹ธ์ธ SELECT ๋ฌธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” 'time_age_tbl'์ด๋ผ๋Š” ์ด๋ฆ„์˜ ๋˜ ๋‹ค๋ฅธ CTE๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

SELECT c.customer_id, r.sales_ymd, c.application_date, AGE(TO_TIMESTAMP(CAST(r.sales_ymd AS VARCHAR), 'YYYYMMDD'), TO_TIMESTAMP(c. application_date, 'YYYYMMMDD')))) AS time_age FROM receipt_distinct r JOIN customer c ON r.customer_id = c.customer_id: ๊ณ ๊ฐ ID, ๋งค์ถœ์ผ์ž, ์‹ ์ฒญ์ผ, ๊ทธ๋ฆฌ๊ณ  ๊ณ ๊ฐ์˜ ์‹ ์ฒญ์ผ๋กœ๋ถ€ํ„ฐ ํ•ด๋‹น ๊ณ ๊ฐ์˜ ์‹ ์ฒญ์ผ๋กœ๋ถ€ํ„ฐ ํ•ด๋‹น ๊ณ ๊ฐ์ด ์ง„ํ–‰ํ•œ ๊ฐœ๋ณ„ ํŒ๋งค์ผ๊นŒ์ง€์˜ ๊ฒฝ๊ณผ ์‹œ๊ฐ„์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ฒฝ๊ณผ์‹œ๊ฐ„ ๊ณ„์‚ฐ์€ ํŒ๋งค์ผ์ž์™€ ์‹ ์ฒญ์ผ์„ ํƒ€์ž„์Šคํƒฌํ”„๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  AGE ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ทธ ์ฐจ์ด๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ 'receipt_distinct' CTE์™€ 'customer' ํ…Œ์ด๋ธ”์„ ๊ณ ๊ฐ ID๋กœ ๊ฒฐํ•ฉํ•œ๋‹ค.

SELECT customer_id, sales_ymd, application_date, EXTRACT(YEAR FROM time_age) * 12 + EXTRACT(MONTH FROM time_age) AS elapsed_months FROM time_age_. tbl LIMIT 10: ๊ณ ๊ฐ ID, ํŒ๋งค์ผ์ž, ์‹ ์ฒญ์ผ, ๊ณ ๊ฐ์˜ ์‹ ์ฒญ์ผ๋กœ๋ถ€ํ„ฐ ํ•ด๋‹น ๊ณ ๊ฐ์ด ์ง„ํ–‰ํ•œ ๊ฐœ๋ณ„ ํŒ๋งค์ผ๊นŒ์ง€์˜ ๊ฒฝ๊ณผ ๊ฐœ์›” ์ˆ˜๋ฅผ ์„ ํƒํ•œ๋‹ค. ๊ฒฝ๊ณผ ๊ฐœ์›” ์ˆ˜ ๊ณ„์‚ฐ์€ ๊ฒฝ๊ณผ์‹œ๊ฐ„์˜ ๋…„ ์„ฑ๋ถ„๊ณผ ์›” ์„ฑ๋ถ„์„ ์ถ”์ถœํ•˜์—ฌ ์›”์ˆ˜๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ์ถœ๋ ฅ์„ ์ฒ˜์Œ 10์ค„๋กœ ์ œํ•œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์š”์•ฝํ•˜๋ฉด, ์ด ์ฝ”๋“œ์—์„œ๋Š” ๋จผ์ € 'receive' ํ…Œ์ด๋ธ”์—์„œ ๊ณ ๊ฐ ID์™€ ๋งค์ถœ ์—ฐ๋„๋ฅผ ์„ ํƒํ•˜๊ณ , 'customer' ํ…Œ์ด๋ธ”๊ณผ ๊ฒฐํ•ฉํ•˜์—ฌ ๊ณ ๊ฐ์˜ ์‹ ์ฒญ์ผ์„ ๊ฐ€์ ธ์™€์„œ ๊ณ ๊ฐ์˜ ์‹ ์ฒญ์ผ๋กœ๋ถ€ํ„ฐ ํ•ด๋‹น ๊ณ ๊ฐ์˜ ๊ฐœ๋ณ„ ๋งค์ถœ์ผ๊นŒ์ง€์˜ ๊ฒฝ๊ณผ ๊ฐœ์›” ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ CTE์™€ AGE ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒ๋งค์ผ๊ณผ ์‹ ์ฒญ์ผ ์‚ฌ์ด์˜ ๊ฒฝ๊ณผ ์‹œ๊ฐ„์„ ๊ณ„์‚ฐํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์›” ๋‹จ์œ„๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. ์ด๋Š” ๋‘ ๊ฐœ์˜ CTE๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์ €์žฅํ•˜๊ณ , ํ•ด๋‹น ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์‚ฐ์ˆ  ์—ฐ์‚ฐ๊ณผ ๊ฒฐํ•ฉ์„ ์ˆ˜ํ–‰ํ•จ์œผ๋กœ์จ ์ด๋ฃจ์–ด์ง„๋‹ค.
ย 
์„ค๋ช…:

์ด SQL ์ฝ”๋“œ๋Š” ๊ตฌ๋งค ๊ณ ๊ฐ์˜ ๊ณ ๊ฐ ID, ํŒ๋งค์ผ, ์‹ ์ฒญ์ผ์„ ์ทจ๋“ํ•˜๊ณ  ์‹ ์ฒญ์ผ๊ณผ ํŒ๋งค์ผ ์‚ฌ์ด์˜ ๊ฒฝ๊ณผ ์—ฐ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.

์ด ์ฝ”๋“œ์—์„œ๋Š” ๋จผ์ € receipt_distinct๋ผ๋Š” ๊ณตํ†ต ํ…Œ์ด๋ธ” ์‹์„ ์ƒ์„ฑํ•˜๊ณ , receipt ํ…Œ์ด๋ธ”์—์„œ ๊ณ ๊ฐ ID์™€ ํŒ๋งค ๋‚ ์งœ์˜ ๊ฐœ๋ณ„ ์กฐํ•ฉ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ฐ ๊ณ ๊ฐ์ด ์—ฌ๋Ÿฌ ๋ฒˆ ๊ตฌ๋งคํ•˜๋”๋ผ๋„ ํ•œ ๋ฒˆ๋งŒ ๊ณ„์‚ฐ๋˜๋„๋ก ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฉ”์ธ ์ฟผ๋ฆฌ์—์„œ๋Š” receipt_distinct ํ…Œ์ด๋ธ”์—์„œ ๊ณ ๊ฐ ID, ํŒ๋งค์ผ, ์‹ ์ฒญ์ผ์„ ์„ ํƒํ•˜๊ณ  EXTRACT ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹ ์ฒญ์ผ๊ณผ ํŒ๋งค์ผ ์‚ฌ์ด์˜ ๊ฒฝ๊ณผ ์—ฐ๋„๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  AGE ํ•จ์ˆ˜๋กœ ๋‘ ๋‚ ์งœ์˜ ์‹œ๊ฐ„์ฐจ๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  EXTRACT ํ•จ์ˆ˜๋กœ ๊ฒฐ๊ณผ์˜ ๊ฐ„๊ฒฉ์—์„œ ์—ฐ๋„ ์„ฑ๋ถ„์„ ์ถ”์ถœํ•œ๋‹ค.

๊ฒฐ๊ณผ๋Š” ๊ฐ ๊ณ ๊ฐ์˜ ๊ณ ๊ฐ ID, ํŒ๋งค์ผ, ์‹ ์ฒญ์ผ, ๊ฒฝ๊ณผ ์—ฐ๋„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ‘œ๋กœ ๋งŒ๋“ค์–ด์ง€๋ฉฐ, LIMIT ๊ตฌ๋ฌธ์€ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์˜ ์ฒซ 10ํ–‰์œผ๋กœ ์ถœ๋ ฅ์„ ์ œํ•œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

ย 

์„ค๋ช…:

์ด SQL ์ฝ”๋“œ๋Š” ๊ตฌ๋งค ๊ณ ๊ฐ์˜ ๊ณ ๊ฐ ID, ํŒ๋งค์ผ, ์‹ ์ฒญ์ผ์„ ๊ฐ€์ ธ์™€ ์‹ ์ฒญ์ผ๊ณผ ํŒ๋งค์ผ ์‚ฌ์ด์˜ ๊ฒฝ๊ณผ ์‹œ๊ฐ„์„ ๊ณ„์‚ฐํ•œ๋‹ค.

์ด ์ฝ”๋“œ์—์„œ๋Š” ๋จผ์ € receipt_distinct๋ผ๋Š” ๊ณตํ†ต ํ…Œ์ด๋ธ” ์‹์„ ๋งŒ๋“ค๊ณ , receipt ํ…Œ์ด๋ธ”์—์„œ ๊ณ ๊ฐ ID์™€ ํŒ๋งค ๋‚ ์งœ์˜ ๊ฐœ๋ณ„ ์กฐํ•ฉ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ฐ ๊ณ ๊ฐ์ด ์—ฌ๋Ÿฌ ๋ฒˆ ๊ตฌ๋งคํ•˜๋”๋ผ๋„ ํ•œ ๋ฒˆ๋งŒ ๊ณ„์‚ฐ๋˜๋„๋ก ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค์Œ์œผ๋กœ ๋ฉ”์ธ ์ฟผ๋ฆฌ์—์„œ receipt_distinct ํ…Œ์ด๋ธ”์—์„œ ๊ณ ๊ฐ ID, ํŒ๋งค์ผ, ์‹ ์ฒญ์ผ์„ ์„ ํƒํ•˜๊ณ  EXTRACT ํ•จ์ˆ˜์™€ TO_TIMESTAMP ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹ ์ฒญ์ผ๊ณผ ํŒ๋งค์ผ ์‚ฌ์ด์˜ ๊ฒฝ๊ณผ ์ดˆ๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ์˜ ๊ฐ„๊ฒฉ์—์„œ ์ดˆ๋ฅผ ์ถ”์ถœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ๋Š” ๊ฐ ๊ณ ๊ฐ์˜ ๊ณ ๊ฐ ID, ํŒ๋งค์ผ, ์‹ ์ฒญ์ผ, ๊ฒฝ๊ณผ ์ดˆ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ‘œ์ด๋ฉฐ, LIMIT ๊ตฌ๋ฌธ์€ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์˜ ์ฒ˜์Œ 10์ค„๋กœ ์ถœ๋ ฅ์„ ์ œํ•œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.
ย 
์„ค๋ช…:

์ด SQL ์ฝ”๋“œ๋Š” elapsed_days_tbl์ด๋ผ๋Š” ๊ณตํ†ต ํ…Œ์ด๋ธ” ํ‘œํ˜„์‹(CTE)์„ ์ •์˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘ํ•œ๋‹ค. ์ด CTE๋Š” ์˜์ˆ˜์ฆ ํ…Œ์ด๋ธ”์˜ ๊ฐ sales_ymd ๋‚ ์งœ์˜ ์š”์ผ(0์—์„œ 6๊นŒ์ง€์˜ ์ˆซ์ž, 0์€ ์ผ์š”์ผ)์„ ์ถ”์ถœํ•œ๋‹ค.

๋ฉ”์ธ ์ฟผ๋ฆฌ์—์„œ๋Š” elapsed_days_tbl CTE์—์„œ sales_ymd์™€ elapsed_days๊ฐ€ ์„ ํƒ๋˜์–ด ์žˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด ์ฝ”๋“œ์—์„œ๋Š” sales_ymd์—์„œ elapsed_days๋ฅผ ๋นผ์„œ ์ƒˆ๋กœ์šด ๋‚ ์งœ๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค. ์ด๋Š” elapsed_days๋ฅผ ์ •์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  sales_ymd์—์„œ ๋นผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ ๋‚ ์งœ๋Š” sales_ymd์˜ ๋‚ ์งœ์— ํ•ด๋‹นํ•˜๋Š” ์ฃผ ์›”์š”์ผ์ด ๋œ๋‹ค.

์ฝ”๋“œ ๋งˆ์ง€๋ง‰์— ์žˆ๋Š” LIMIT 10 ๊ตฌ๋ฌธ์€ ์ถœ๋ ฅ์„ ์ฒ˜์Œ 10์ค„๋กœ ์ œํ•œํ•œ๋‹ค.
ย 
์„ค๋ช…:

์ด SQL ์ฝ”๋“œ๋Š” customer ํ…Œ์ด๋ธ”์—์„œ 10๋ช…์˜ ๊ณ ๊ฐ ์ค‘ ์ž„์˜์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์œผ๋กœ, RANDOM() ํ•จ์ˆ˜๋Š” ํ…Œ์ด๋ธ”์˜ ๊ฐ ํ–‰์— ๋Œ€ํ•ด 0์—์„œ 1 ์‚ฌ์ด์˜ ์ž„์˜์˜ ๊ฐ’์„ ์ƒ์„ฑํ•˜๊ณ , WHERE ๊ตฌ๋ฌธ์€ ์ƒ์„ฑ๋œ ๊ฐ’์ด 0.01 ์ดํ•˜(์„ ํƒ๋  ํ™•๋ฅ  1%)์ธ์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ํ–‰์„ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค. ์— ๋”ฐ๋ผ ํ–‰์„ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.

์ด๋Š” ํ…Œ์ด๋ธ”์˜ ๋‹ค๋ฅธ ์กฐ๊ฑด์ด๋‚˜ ์ˆœ์„œ์— ๊ด€๊ณ„์—†์ด ๊ฐ ํ–‰์ด ์„ ํƒ๋  ํ™•๋ฅ ์ด ๋™์ผํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋ฉฐ, LIMIT ์ ˆ์€ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋Š” ์ฒ˜์Œ 10๊ฐœ์˜ ํ–‰์œผ๋กœ ์ถœ๋ ฅ์„ ์ œํ•œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.
ย 
ย 
์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” SQL ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ "customer" ํ…Œ์ด๋ธ”์—์„œ ์ž„์˜์˜ ๊ณ ๊ฐ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ์„ ํƒํ•˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

์ด ์ฝ”๋“œ์—์„œ๋Š” ๋จผ์ € "customer" ํ…Œ์ด๋ธ”์—์„œ ๋ชจ๋“  ์—ด์„ ์„ ํƒํ•˜๊ณ  ROW_NUMBER ํ•จ์ˆ˜์™€ COUNT ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ๊ฐœ์˜ ์—ด์„ ์ถ”๊ฐ€ํ•˜์—ฌ "customer_tmp"๋ผ๋Š” ์ž„์‹œ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

ROW_NUMBER ํ•จ์ˆ˜๋Š” ORDER BY RANDOM() ๊ตฌ๋ฌธ์˜ ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ํ…Œ์ด๋ธ”์˜ ๊ฐ ํ–‰์— ๊ณ ์œ ํ•œ ์ •์ˆ˜๋ฅผ ํ• ๋‹นํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ…Œ์ด๋ธ”์˜ ํ–‰ ์ˆœ์„œ๊ฐ€ ํšจ๊ณผ์ ์œผ๋กœ ๋ฌด์ž‘์œ„ํ™”๋œ๋‹ค.

OVER() ์ ˆ์ด ์žˆ๋Š” COUNT ํ•จ์ˆ˜๋Š” ํ…Œ์ด๋ธ”์˜ ์ด ํ–‰ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ๊ฐ ํ–‰์˜ ์ด ์ˆ˜๋ฅผ ํฌํ•จํ•˜๋Š” "cnt"๋ผ๋Š” ์ƒˆ๋กœ์šด ์—ด์„ ์ƒ์„ฑํ•œ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ฉ”์ธ SELECT ๋ฌธ์€ ROW_NUMBER ํ•จ์ˆ˜๋กœ ์ƒ์„ฑ๋œ "row" ์—ด๋กœ ํ•„ํ„ฐ๋งํ•˜์—ฌ ์ž„์‹œ ํ…Œ์ด๋ธ”์—์„œ ๊ณ ๊ฐ์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ์„ ํƒํ•œ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ COUNT ํ•จ์ˆ˜๋กœ ์ƒ์„ฑ๋œ "cnt" ์—ด์— ์˜ํ•ด ๊ฒฐ์ •๋˜๋Š” ์ฒ˜์Œ 1%์˜ ํ–‰์„ ์„ ํƒํ•œ๋‹ค.

๋งˆ์ง€๋ง‰ ์ ˆ "LIMIT 10"์€ ๊ฒฐ๊ณผ๋ฅผ ํ•˜์œ„ ์ง‘ํ•ฉ์˜ ์ฒ˜์Œ 10 ๊ฐœ ํ–‰์œผ๋กœ ์ œํ•œํ•˜์—ฌ ์›๋ž˜ "customer"ํ…Œ์ด๋ธ”์—์„œ 10 ๋ช…์˜ ๊ณ ๊ฐ ๋ฌด์ž‘์œ„ ์ƒ˜ํ”Œ์„ ํšจ๊ณผ์ ์œผ๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ „์ฒด์ ์œผ๋กœ ์ด ์ฝ”๋“œ๋Š” ํ…Œ์ŠคํŠธ ๋ฐ ํƒ์ƒ‰์  ๋ถ„์„ ๋ชฉ์ ์œผ๋กœ ํฐ ํ…Œ์ด๋ธ”์—์„œ ๋ฌด์ž‘์œ„ ๊ณ ๊ฐ ์ƒ˜ํ”Œ์„ ์„ ํƒํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค. ์ƒ˜ํ”Œ๋ง ๋น„์œจ(์ด ๊ฒฝ์šฐ 1%)์„ ์กฐ์ •ํ•˜์—ฌ ๋” ํฐ ์ƒ˜ํ”Œ์ด๋‚˜ ๋” ์ž‘์€ ์ƒ˜ํ”Œ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ย 
์„ค๋ช…:

์ด SQL ์ฝ”๋“œ๋Š” "customer"๋ผ๋Š” ํ…Œ์ด๋ธ”์—์„œ ์ž„์˜์˜ ๊ณ ๊ฐ ์ƒ˜ํ”Œ์„ ์„ ํƒํ•˜๊ณ , ์ƒ˜ํ”Œ ๋‚ด ๊ฐ ์„ฑ๋ณ„์— ํ•ด๋‹นํ•˜๋Š” ๊ณ ๊ฐ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ์žˆ๋‹ค.

์•„๋ž˜๋Š” ์ฝ”๋“œ์˜ ๊ฐ ํŒŒํŠธ๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์˜ ๋‚ด์—ญ์ž…๋‹ˆ๋‹ค.

WITH ๊ตฌ๋ฌธ: ์ด ๊ตฌ๋ฌธ์€ ํ›„์† SELECT ๋ฌธ์—์„œ ์‚ฌ์šฉํ•  ๋‘ ๊ฐœ์˜ ์ž„์‹œ ํ…Œ์ด๋ธ”์ธ 'customer_random'๊ณผ 'customer_rownum'์„ ์ƒ์„ฑํ•œ๋‹ค.

customer_random ํ…Œ์ด๋ธ”. ์ด ํ…Œ์ด๋ธ”์€ 'customer' ํ…Œ์ด๋ธ”์—์„œ ๊ณ ๊ฐ์˜ ๋ฌด์ž‘์œ„ ์ƒ˜ํ”Œ์„ ์„ ํƒํ•˜๊ณ  ๊ฐ ๊ณ ๊ฐ์—๊ฒŒ ์„ฑ๋ณ„์— ๋”ฐ๋ผ 'customer_r' ๊ฐ’์„ ํ• ๋‹นํ•˜๋ฉฐ, 'cnt' ์—ด์€ ๊ฐ ์„ฑ๋ณ„ ๊ทธ๋ฃน์˜ ์ด ๊ณ ๊ฐ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.

customer_rownum ํ…Œ์ด๋ธ”. ์ด ํ…Œ์ด๋ธ”์€ 'customer_random' ํ…Œ์ด๋ธ”์˜ ๊ฐ ๊ณ ๊ฐ์—๊ฒŒ ์„ฑ๋ณ„๋กœ ๊ตฌ๋ถ„๋œ ํ–‰ ๋ฒˆํ˜ธ("rn")๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

SELECT ๋ฌธ. ์ด ๋ฌธ์€ ๊ฐ ์„ฑ๋ณ„ ๊ทธ๋ฃน์—์„œ ํ–‰ ๋ฒˆํ˜ธ๊ฐ€ ํ•ด๋‹น ์„ฑ๋ณ„ ๊ทธ๋ฃน ๋‚ด ์ด ๊ณ ๊ฐ ์ˆ˜์˜ 10% ์ดํ•˜์ธ ๊ณ ๊ฐ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค(์ฆ‰, ํ–‰ ๋ฒˆํ˜ธ ๊ธฐ์ค€ ์ƒ์œ„ 10%์˜ ๊ณ ๊ฐ์ด๋‹ค). ๊ฒฐ๊ณผ๋Š” 'gender_cd'์™€ 'customer_num'์˜ ๋‘ ์—ด์„ ๊ฐ€์ง„ ํ‘œ๋กœ, 'gender_cd'๋Š” ์„ฑ๋ณ„ ์ฝ”๋“œ, 'customer_num'์€ ํ•ด๋‹น ์„ฑ๋ณ„ ๊ทธ๋ฃน์—์„œ ํ–‰ ๋ฒˆํ˜ธ๋กœ ์ƒ์œ„ 10%์— ์†ํ•˜๋Š” ๊ณ ๊ฐ ์ˆ˜์ด๋‹ค.

์ „์ฒด์ ์œผ๋กœ ์ด ์ฝ”๋“œ๋Š” ๋” ํฐ ๋ฐ์ดํ„ฐ ์„ธํŠธ์—์„œ ๊ณ ๊ฐ์˜ ๋ฌด์ž‘์œ„ ์ƒ˜ํ”Œ์„ ์„ ํƒํ•˜๊ณ  ๊ทธ ์„ฑ๋ณ„ ๋ถ„ํฌ๋ฅผ ๋ถ„์„ํ•˜๋Š” ๋ฐ ํŽธ๋ฆฌํ•˜๋‹ค.

ย 

์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” SQL ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ "customer" ํ…Œ์ด๋ธ”์—์„œ ๊ณ ๊ฐ์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ๋ฌด์ž‘์œ„๋กœ ์„ ํƒํ•˜๊ณ  ์„ฑ๋ณ„์— ๋”ฐ๋ผ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ๊ฐ ์„ฑ๋ณ„ ๊ทธ๋ฃน์˜ ๊ณ ๊ฐ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

์ด ์ฝ”๋“œ์—์„œ๋Š” ๋จผ์ € 'customer' ํ…Œ์ด๋ธ”์—์„œ ๋ชจ๋“  ์—ด์„ ์„ ํƒํ•˜๊ณ  ROW_NUMBER ํ•จ์ˆ˜์™€ COUNT ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ๊ฐœ์˜ ์—ด์„ ์ถ”๊ฐ€ํ•˜์—ฌ 'cusotmer_random'์ด๋ผ๋Š” ์ž„์‹œ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

ROW_NUMBER ํ•จ์ˆ˜๋Š” ORDER BY RANDOM() ๊ตฌ๋ฌธ์˜ ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ํ…Œ์ด๋ธ”์˜ ๊ฐ ํ–‰์— ๊ณ ์œ ํ•œ ์ •์ˆ˜๋ฅผ ํ• ๋‹นํ•œ๋‹ค. ์ด๋Š” ํ…Œ์ด๋ธ”์˜ ํ–‰ ์ˆœ์„œ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๋ฌด์ž‘์œ„ํ™”ํ•ฉ๋‹ˆ๋‹ค.

ROW_NUMBER ํ•จ์ˆ˜์˜ PARTITION BY gender_cd ๊ตฌ๋ฌธ์€ ๊ฐ ์„ฑ๋ณ„ ๊ทธ๋ฃน์— ๋Œ€ํ•ด ๊ฐœ๋ณ„์ ์œผ๋กœ ๋ฌด์ž‘์œ„ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•œ๋‹ค.

OVER(PARTITION BY gender_cd) ์ ˆ์ด ์žˆ๋Š” COUNT ํ•จ์ˆ˜๋Š” ๊ฐ ์„ฑ๋ณ„ ๊ทธ๋ฃน์˜ ์ด ํ–‰ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ๊ฐ ํ–‰์˜ ์ด ์นด์šดํŠธ๋ฅผ ํฌํ•จํ•˜๋Š” 'cnt'๋ผ๋Š” ์ƒˆ๋กœ์šด ์—ด์„ ์ƒ์„ฑํ•œ๋‹ค.

๋‹ค์Œ์œผ๋กœ ๋ฉ”์ธ SELECT ๋ฌธ์€ ROW_NUMBER ํ•จ์ˆ˜๋กœ ์ƒ์„ฑ๋œ 'rn' ์—ด๋กœ ํ•„ํ„ฐ๋งํ•˜์—ฌ ์ž„์‹œ ํ…Œ์ด๋ธ”์—์„œ ๊ณ ๊ฐ์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ์„ ํƒํ•œ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ COUNT ํ•จ์ˆ˜๋กœ ์ƒ์„ฑ๋œ "cnt" ์ปฌ๋Ÿผ์— ์˜ํ•ด ๊ฒฐ์ •๋˜๋Š” ๊ฐ ์„ฑ๋ณ„ ๊ทธ๋ฃน ํ–‰์˜ ์ฒ˜์Œ 10%๋ฅผ ์„ ํƒํ•œ๋‹ค.

WHERE ์ ˆ์€ 'cusotmer_random' ํ…Œ์ด๋ธ”์˜ ํ–‰์„ ํ•„ํ„ฐ๋งํ•˜์—ฌ 'rn' ๊ฐ’์ด ๊ฐ ์„ฑ๋ณ„ ๊ทธ๋ฃน์˜ 'cnt' ๊ฐ’์˜ 10% ์ดํ•˜์ธ ๊ฒƒ๋งŒ ํฌํ•จํ•œ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ, ๋ฉ”์ธ SELECT ๋ฌธ์€ gender_cd๋กœ ํ–‰์„ ๊ทธ๋ฃนํ™”ํ•˜๊ณ  ๊ฐ ๊ทธ๋ฃน์˜ ํ–‰ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ ํšจ๊ณผ์ ์œผ๋กœ ๋ฌด์ž‘์œ„ ์ƒ˜ํ”Œ์˜ ๊ฐ ์„ฑ๋ณ„ ๊ทธ๋ฃน์˜ ๊ณ ๊ฐ ์ˆ˜๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ „์ฒด์ ์œผ๋กœ ์ด ์ฝ”๋“œ๋Š” ํฐ ํ…Œ์ด๋ธ”์—์„œ ๊ณ ๊ฐ์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ๋ฌด์ž‘์œ„๋กœ ์„ ํƒํ•˜๋ฉด์„œ ์ƒ˜ํ”Œ์ด ์›๋ž˜ ํ…Œ์ด๋ธ”๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ฐ ์„ฑ๋ณ„ ๊ทธ๋ฃน์˜ ๋น„์œจ์„ ํฌํ•จํ•˜๋„๋ก ๋ณด์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์ƒ˜ํ”Œ๋ง ๋น„์œจ(์ด ๊ฒฝ์šฐ 10%)์€ ๋” ํฌ๊ฑฐ๋‚˜ ์ž‘์€ ์ƒ˜ํ”Œ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ย 
์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” SQL ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€์ˆ˜ ๋ณ€ํ™˜๋œ ๊ตฌ๋งค ๊ธˆ์•ก์„ ๊ธฐ์ค€์œผ๋กœ ๊ตฌ๋งค ๊ธˆ์•ก ํ•ฉ๊ณ„๊ฐ€ ํ‘œ์ค€์—์„œ ํฌ๊ฒŒ ๋ฒ—์–ด๋‚œ ๊ณ ๊ฐ์„ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ฝ”๋“œ์—์„œ๋Š” ๋จผ์ € "์˜์ˆ˜์ฆ" ํ…Œ์ด๋ธ”์—์„œ customer_id์™€ ๊ตฌ๋งค ๊ธˆ์•ก์˜ ํ•ฉ๊ณ„๋ฅผ ์„ ํƒํ•˜๊ณ  customer_id๋กœ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ "sales_amount"๋ผ๋Š” ์ž„์‹œ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ๊ตฌ๋งค ๊ธˆ์•ก ํ•ฉ๊ณ„๋Š” LN ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€์ˆ˜ ๋ณ€ํ™˜ํ•˜์—ฌ 0์˜ ๋Œ€์ˆ˜๋ฅผ ์ทจํ•˜์ง€ ์•Š๋„๋ก 0.5๋ฅผ ๋”ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์œผ๋กœ ๋ฉ”์ธ SELECT ๋ฌธ์€ ์ž„์‹œ ํ…Œ์ด๋ธ”์—์„œ customer_id, sum_amount, log_sum_amount ์ปฌ๋Ÿผ์„ ์„ ํƒํ•œ๋‹ค. ๋˜ํ•œ CROSS JOIN์„ ์‚ฌ์šฉํ•˜์—ฌ "stats_amount"๋ผ๋Š” ๋˜ ๋‹ค๋ฅธ ์ž„์‹œ ํ…Œ์ด๋ธ”์— ์ฐธ์—ฌํ•œ๋‹ค." "stats_amount"๋Š” "sales_amount" ํ…Œ์ด๋ธ”์—์„œ log_sum_amount ์—ด์˜ ํ‰๊ท ๊ณผ ๋ชจํ‘œ์ค€ํŽธ์ฐจ๋ฅผ ์„ ํƒํ•˜์—ฌ ์ƒ์„ฑํ•œ๋‹ค.

WHERE ์ ˆ์€ "sales_amount" ํ…Œ์ด๋ธ”์˜ ํ–‰์„ ํ•„ํ„ฐ๋งํ•˜์—ฌ log_sum_amount์™€ ํ‰๊ท  log_sum_amount์˜ ์ฐจ์ด์˜ ์ ˆ๋Œ€๊ฐ’์„ log_sum_amount์˜ ํ‘œ์ค€ํŽธ์ฐจ๋กœ ๋‚˜๋ˆ„์–ด 3๋ณด๋‹ค ํฐ ๊ฒƒ๋“ค๋งŒ ํฌํ•จํ•œ๋‹ค. ์ด๋Š” ๊ตฌ๋งค ๊ธˆ์•ก์ด ํ‰๊ท ๊ฐ’์—์„œ 3ํ‘œ์ค€ํŽธ์ฐจ ์ด์ƒ ๋–จ์–ด์ ธ ์žˆ๋Š” ๊ณ ๊ฐ์„ ์‹๋ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋ฉฐ, ํ†ต๊ณ„ ๋ถ„์„์—์„œ ์ด์ƒ๊ฐ’์„ ์‹๋ณ„ํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ์ž„๊ณ„๊ฐ’์ด๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ, ๋ฉ”์ธ SELECT ๋ฌธ์€ ์ถœ๋ ฅ์„ 10์ค„๋กœ ์ œํ•œํ•œ๋‹ค.

์ „์ฒด์ ์œผ๋กœ ์ด ์ฝ”๋“œ๋Š” ๊ตฌ๋งค ๊ธˆ์•ก์„ ๋Œ€์ˆ˜ ์ฒ™๋„๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ํ†ต๊ณ„์  ์ด์ƒ์น˜ ํƒ์ง€ ๊ธฐ์ค€์„ ์ ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์„ธํŠธ์˜ ํ‰๊ท  ๊ตฌ๋งค ๊ธˆ์•ก์— ๋น„ํ•ด ํ˜„์ €ํ•˜๊ฒŒ ํฐ ๊ตฌ๋งค ๋˜๋Š” ์ž‘์€ ๊ตฌ๋งค๋ฅผ ํ•œ ๊ณ ๊ฐ์„ ์‹๋ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
ย 
์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” SQL ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ฟผ๋ฆฌํ•˜๊ณ  ์žˆ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ CTE(Common Table Expression)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 'sales_amount'๋ผ๋Š” ์ž„์‹œ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๊ณ  'receive' ํ…Œ์ด๋ธ”์˜ ๊ฐ ๊ณ ๊ฐ์— ๋Œ€ํ•œ ์ด ๋งค์ถœ์•ก์„ ๊ณ„์‚ฐํ•œ๋‹ค.

CTE์˜ WHERE ๊ตฌ๋ฌธ์€ ID๊ฐ€ "Z"๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ณ ๊ฐ์„ ํ•„ํ„ฐ๋งํ•˜์—ฌ ์ œ์™ธํ•˜๋ฉฐ, GROUP BY ๊ตฌ๋ฌธ์€ ๊ณ ๊ฐ ID๋ณ„๋กœ ๋งค์ถœ์„ ๊ทธ๋ฃนํ™”ํ•œ๋‹ค.

๋ฉ”์ธ ์ฟผ๋ฆฌ์—์„œ๋Š” 'sales_amount' ํ…Œ์ด๋ธ”๊ณผ PERCENTILE_CONT ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งค์ถœ ๊ธˆ์•ก์˜ 25๋ฒˆ์งธ ๋ฐฑ๋ถ„์œ„์ˆ˜์™€ 75๋ฒˆ์งธ ๋ฐฑ๋ถ„์œ„์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ์„œ๋ธŒ ์ฟผ๋ฆฌ ์‚ฌ์ด์— CROSS JOIN์ด ์ˆ˜ํ–‰๋œ๋‹ค. ์ด ๋ฐฑ๋ถ„์œ„์ˆ˜๋Š” "stats_amount"๋ผ๋Š” ์ž„์‹œ ํ…Œ์ด๋ธ”์— ์ €์žฅ๋œ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฉ”์ธ ์ฟผ๋ฆฌ์˜ WHERE ๊ตฌ๋ฌธ์—์„œ 25๋ถ„์œ„์ˆ˜๋‚˜ 75๋ถ„์œ„์ˆ˜์—์„œ ์‚ฌ๋ถ„์œ„์ˆ˜ ๋ฒ”์œ„(IQR)์˜ 1.5๋ฐฐ ์ด์ƒ ๋–จ์–ด์ ธ ์žˆ๋Š” ๋งค์ถœ ๊ธˆ์•ก์„ ํ•„ํ„ฐ๋งํ•˜์—ฌ ์ œ์™ธํ•œ๋‹ค. ์ด๋Š” ๋ฐ์ดํ„ฐ ์„ธํŠธ์˜ ์ด์ƒ๊ฐ’์„ ์‹๋ณ„ํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์ด๋‹ค. ๊ฒฐ๊ณผ๋Š” ์ƒ์œ„ 10๊ฐœ ๋ผ์ธ์œผ๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.

์ „์ฒด์ ์œผ๋กœ ์ด ์ฝ”๋“œ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์กฐํšŒํ•˜์—ฌ ์‚ฌ๋ถ„์œ„์ˆ˜ ๋ฒ”์œ„ ๋‚ด์˜ ์œ„์น˜์— ๋”ฐ๋ผ ๋™์ข…์—…๊ณ„์— ๋น„ํ•ด ๋น„์ •์ƒ์ ์œผ๋กœ ๋†’์€ ๋˜๋Š” ๋‚ฎ์€ ๋งค์ถœ ๊ธˆ์•ก์„ ๊ฐ€์ง„ ๊ณ ๊ฐ์„ ์‹๋ณ„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
ย 
์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” SQL ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ฟผ๋ฆฌํ•˜๊ณ  ์žˆ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ "product" ํ…Œ์ด๋ธ”์„ ์กฐํšŒํ•˜๊ณ  SUM ๋ฌธ๊ณผ CASE ๋ฌธ์„ ์กฐํ•ฉํ•˜์—ฌ ํ…Œ์ด๋ธ”์˜ ๊ฐ ์—ด์—์„œ ๋ˆ„๋ฝ๋œ ๊ฐ’(NULL)์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ฟผ๋ฆฌ์—์„œ๋Š” 6๊ฐœ์˜ ์ปฌ๋Ÿผ์„ ์„ ํƒํ•˜๊ณ  ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ ์ด๋ฆ„๊ณผ ์ผ์น˜ํ•˜๋Š” ๋ณ„์นญ์„ ๋ถ€์—ฌํ•˜๊ณ  ์žˆ๋‹ค. 'product_cd', 'category_major_cd', 'category_medium_cd', 'category_small_cd', 'unit_price', 'unit_cost'.

๊ฐ ์ปฌ๋Ÿผ์— ๋Œ€ํ•ด CASE ๋ฌธ์€ ๊ฐ’์ด NULL์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๊ณ , NULL์ด๋ฉด 1์„, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด 0์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  SUM ํ•จ์ˆ˜๋กœ 1๊ณผ 0์„ ํ•ฉํ•˜์—ฌ ๊ฐ ์—ด์˜ NULL ๊ฐ’์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.

LIMIT 10 ๊ตฌ๋ฌธ์€ ๊ฒฐ๊ณผ๋ฅผ ํ…Œ์ด๋ธ”์˜ ์ฒ˜์Œ 10๊ฐœ์˜ ํ–‰์œผ๋กœ ์ œํ•œํ•˜์ง€๋งŒ, ์ด ๊ฒฝ์šฐ ์š”์•ฝ ํ†ต๊ณ„์—๋งŒ ๊ด€์‹ฌ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„ ์˜๋ฏธ๊ฐ€ ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ „์ฒด์ ์œผ๋กœ ์ด ์ฝ”๋“œ๋Š” "product" ํ…Œ์ด๋ธ”์˜ ๋ˆ„๋ฝ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•˜๊ณ  ๊ฐ ์—ด์˜ ๋ˆ„๋ฝ๋œ ๊ฐ’์˜ ์ˆ˜์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์š”์•ฝ์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค.

ย 

์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” SQL ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 'product' ํ…Œ์ด๋ธ”์—์„œ 'unit_price' ์—ด๊ณผ 'unit_cost' ์—ด์ด ๋ชจ๋‘ NULL์ด ์•„๋‹Œ ํ–‰๋งŒ ์„ ํƒํ•˜์—ฌ 'product_1'์ด๋ผ๋Š” ์ƒˆ๋กœ์šด ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๊ณ  ์žˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ํ–‰์˜ 'DROP TABLE IF EXISTS product_1;'์€ 'product_1' ํ…Œ์ด๋ธ”์ด ์ด๋ฏธ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ์‚ญ์ œํ•˜์—ฌ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜๋Š” ํ…Œ์ด๋ธ”๊ณผ ์ถฉ๋Œ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•œ ์•ˆ์ „์žฅ์น˜์ด๋‹ค.

๋‘ ๋ฒˆ์งธ ํ–‰์˜ 'CREATE TABLE product_1 AS (...) ;'๋Š” 'product_1'์ด๋ผ๋Š” ์ƒˆ๋กœ์šด ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๊ณ , ๊ทธ ๋‚ด์šฉ์€ SELECT ๋ฌธ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ง€์ •ํ•œ๋‹ค.

SELECT ๋ฌธ์€ product ํ…Œ์ด๋ธ”์—์„œ ๋ชจ๋“  ์—ด์„ ์„ ํƒํ•˜์ง€๋งŒ, WHERE ๊ตฌ๋ฌธ์ด ํฌํ•จ๋˜์–ด unit_price ๋˜๋Š” unit_cost ์—ด์ด NULL์ธ ํ–‰์„ ํ•„ํ„ฐ๋งํ•œ๋‹ค.

์ „์ฒด์ ์œผ๋กœ ์ด ์ฝ”๋“œ๋Š” ์›๋ž˜์˜ "product" ํ…Œ์ด๋ธ”์—์„œ "unit_price"์™€ "unit_cost" ๋‘ ์—ด์— ๋ชจ๋‘ ์œ ํšจํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ํ–‰๋งŒ ํฌํ•จํ•˜๋Š” ์ƒˆ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ฆฌํ•˜๊ณ  ๋ถ„์„ ๋ฐ ๋ชจ๋ธ๋ง์— ๋Œ€๋น„ํ•˜๊ธฐ ์œ„ํ•œ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์ด๋‹ค. ๋ˆ„๋ฝ๋œ ๋ฐ์ดํ„ฐ๋Š” ์ผ๋ถ€ ๋ถ„์„ ๊ธฐ๋ฒ•์—์„œ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.




Comment