๊ด€๋ฆฌ ๋ฉ”๋‰ด

bom's happy life

์ด์ ์„ ๊ณ„์‚ฐํ•ด์„œ ์ˆœ์œ„(RANK)๋ฅผ ๋งค๊ธฐ๊ณ  ์‹ถ์„๋•Œ? - ์ฟผ๋ฆฌ์„ฑ๋Šฅํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ๋ณธ๋ฌธ

Deveolpment Study๐Ÿ—‚๏ธ/Databases

์ด์ ์„ ๊ณ„์‚ฐํ•ด์„œ ์ˆœ์œ„(RANK)๋ฅผ ๋งค๊ธฐ๊ณ  ์‹ถ์„๋•Œ? - ์ฟผ๋ฆฌ์„ฑ๋Šฅํ–ฅ์ƒ์‹œํ‚ค๊ธฐ

bompeach 2023. 7. 24. 14:05

์ˆ˜์š”๋“ฑ๋ก๊ฑด์ˆ˜์™€ ์ฐธ์—ฌ์‹ ์ฒญ ๊ฑด์ˆ˜๋ฅผ ๊ตฌํ•˜๊ณ  ๋‘˜์˜ ์ ์ˆ˜๋ฅผ ๋”ํ•ด์„œ ์ ์ˆ˜๋ฅผ ํ™”๋ฉด์ƒ์— ํ‘œ์‹œํ•˜๋Š” ๊ธฐ์กด์˜ ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š”๋ฐ, ์—ฌ๊ธฐ์— ์ „์ฒด์—์„œ ์ ์ˆ˜ ์ˆœ์œ„๋ฅผ ๊ตฌํ•˜๋Š” ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” db์— ์ด์ ์ˆ˜ ์นผ๋Ÿผ์ด ๊ผญ ์žˆ์–ด์•ผ ํ• ๊นŒ?


์•„๋‹ˆ์š”, ์ด์ ์ˆ˜ ์นผ๋Ÿผ์ด ๊ผญ ํ•„์š”ํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์ ์ˆ˜ ์ˆœ์œ„๋ฅผ ๊ตฌํ•˜๋Š” ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด์ ์ˆ˜ ์นผ๋Ÿผ์ด ์—†๋”๋ผ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ด์ ์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•˜์—ฌ ์ด์ ์ˆ˜ ์นผ๋Ÿผ์— ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์ง€๋งŒ, ์ด๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ์™€ ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋Š” ์ˆ˜์š”๋“ฑ๋ก๊ฑด์ˆ˜์™€ ์ฐธ์—ฌ์‹ ์ฒญ๊ฑด์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ์ด์ ์ˆ˜๋ฅผ ์žฌ๊ณ„์‚ฐํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ์—์„œ ์ด์ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ๊ฐฑ์‹ ํ•˜๋Š” ์ž‘์—…์€ ์„ฑ๋Šฅ์ƒ ๋ถ€๋‹ด์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋Œ€์‹ ์—, ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ ์ˆ˜ ์ˆœ์œ„๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด์ ์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•˜๊ณ  ์ €์žฅํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์ด ๋” ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ฟผ๋ฆฌ๋ฅผ ํ†ตํ•ด ์ˆ˜์š”๋“ฑ๋ก๊ฑด์ˆ˜์™€ ์ฐธ์—ฌ์‹ ์ฒญ ๊ฑด์ˆ˜๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ด์ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ์ •๋ ฌํ•˜์—ฌ ์ˆœ์œ„๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, SQL์„ ์‚ฌ์šฉํ•˜์—ฌ ์ ์ˆ˜ ์ˆœ์œ„๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒฝ์šฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

SELECT user_id, demand_count, participation_count,
       (demand_count + participation_count) AS total_score,
       RANK() OVER (ORDER BY demand_count + participation_count DESC) AS rank
FROM your_table_name;

์œ„ ์ฟผ๋ฆฌ์—์„œ your_table_name์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋œ ํ…Œ์ด๋ธ” ์ด๋ฆ„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. RANK() OVER (ORDER BY total_score DESC) ๋ถ€๋ถ„์€ ์ด์ ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ์ˆœ์œ„๋ฅผ ๋งค๊ธฐ๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ด์ ์ˆ˜๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•˜์ง€ ์•Š๊ณ ๋„ ์ฟผ๋ฆฌ๋ฅผ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ ์ˆ˜ ์ˆœ์œ„๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๊ทธ๋ ‡๋‹ค๋ฉด ๋งŽ์€ ์ง์›๋“ค์ด ์žˆ๊ณ , ๊ทธ ์ง์›๋“ค๋งˆ๋‹ค ์ž๊ธฐ ์ ์ˆ˜๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์–ด์•ผํ•ด. ๊ทธ๋ฆฌ๊ณ  1~3์œ„๊นŒ์ง€๋Š” ํ™”๋ฉด์ƒ์—์„œ ๋ณด์—ฌ์ฃผ๋„๋ก ํ•˜๊ณ  ์‹ถ์€๋ฐ, ์œ„์™€ ๊ฐ™์ด ์ฟผ๋ฆฌ๋ฅผ ์งœ๋ฉด ๋‹ค ๊ฐ€๋Šฅํ•œ ๋ถ€๋ถ„์ด์•ผ?


๋„ค, ์œ„์™€ ๊ฐ™์€ ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋งŽ์€ ์ง์›๋“ค์ด ๊ฐ์ž์˜ ์ ์ˆ˜๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, 1~3์œ„๊นŒ์ง€์˜ ์ ์ˆ˜๋ฅผ ํ™”๋ฉด์ƒ์— ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ง์›๋“ค์ด ๊ฐ์ž์˜ ์ ์ˆ˜๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ ค๋ฉด, ์ฟผ๋ฆฌ์—์„œ ํŠน์ • ์ง์›์˜ ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๋Š” ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, user_id๊ฐ€ ํŠน์ • ์ง์›์˜ ์‹๋ณ„์ž์ธ ๊ฒฝ์šฐ ํ•ด๋‹น ์ง์›์˜ ์ ์ˆ˜ ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๋Š” ์ฟผ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

SELECT user_id, demand_count, participation_count,
       (demand_count + participation_count) AS total_score,
       RANK() OVER (ORDER BY demand_count + participation_count DESC) AS rank
FROM your_table_name
WHERE user_id = 'ํŠน์ •_์ง์›์˜_์‹๋ณ„์ž';

์œ„ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ํŠน์ • ์ง์›์˜ ์ˆ˜์š”๋“ฑ๋ก๊ฑด์ˆ˜, ์ฐธ์—ฌ์‹ ์ฒญ ๊ฑด์ˆ˜, ์ด์ ์ˆ˜, ๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น ์ง์›์˜ ์ˆœ์œ„ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋˜ํ•œ, 1~3์œ„๊นŒ์ง€์˜ ์ ์ˆ˜๋ฅผ ํ™”๋ฉด์ƒ์— ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ๋‹ค๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด RANK() ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๋ฅผ ์กฐ๊ฑด์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ํ•„ํ„ฐ๋งํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

SELECT user_id, demand_count, participation_count,
       (demand_count + participation_count) AS total_score,
       RANK() OVER (ORDER BY demand_count + participation_count DESC) AS rank
FROM your_table_name
WHERE rank <= 3;

์œ„ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ „์ฒด ์ง์› ์ค‘์—์„œ 1~3์œ„๊นŒ์ง€์˜ ์ ์ˆ˜ ์ •๋ณด๋งŒ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ ์ฟผ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฐ ์ง์›์˜ ์ ์ˆ˜ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ณ , 1~3์œ„๊นŒ์ง€์˜ ์ ์ˆ˜๋ฅผ ํ™”๋ฉด์— ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ฐ ์ง์›์˜ ์ •๋ณด๋ฅผ ๋ณผ ๋•Œ๋Š” ํ•ด๋‹น ์ง์›์˜ ์‹๋ณ„์ž๋ฅผ ์กฐ๊ฑด์œผ๋กœ, ์ƒ์œ„ 3๋ช…์˜ ์ ์ˆ˜๋ฅผ ๋ณผ ๋•Œ๋Š” RANK() ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๋ฅผ ์กฐ๊ฑด์œผ๋กœ ํ™œ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

 

 

.

.

.

 

 

GPT์—๊ฒŒ ์งˆ์˜๋ฌธ๋‹ต