SQL์ ๋ชจ๋ธ๋ง ์ด์ ๋จ๊ณ(๋ฐ์ดํฐ ์ค๋น)๋ฅผ ์ง๋ฐฐํฉ๋๋ค. JOIN/GROUP BY๋ก ํ์ต ๋ฐ์ดํฐ์ ์ ๋ง๋ค๊ณ , ์๋์ฐ ํจ์๋ก DB ๋จ ํผ์ฒ๋ฅผ ์์ฑํ๋ฉฐ, ์๋ธ์ฟผ๋ฆฌ/CTE๋ก ๋ณต์กํ ๋ฌธ์ ๋ฅผ ๊ตฌ์กฐํํฉ๋๋ค.
1. ์ ๋ค์ SQL์ธ๊ฐ?
๋ชจ๋ธ ์ฑ๋ฅ์ ๋ฐ์ดํฐ์ ์ง๊ณผ ์์ ์ข์ฐ๋๋๋ฐ, ๊ทธ ๋ฐ์ดํฐ๋ ๋๋ถ๋ถ DB์ ์์ต๋๋ค. Pandas๋ก ๋์ฉ๋์ ๋์ด์ ์ฒ๋ฆฌํ๋ ๋์ , DB ๋จ์์ ํ์ํ ์ง๊ณ๋ ํผ์ฒ๋ฅผ ๋ง๋ ๋ค ์ต์ ๋ฐ์ดํฐ๋ง ์ ๋ฌํ๋ ๊ฒ์ด ํจ์ฌ ํจ์จ์ ์ ๋๋ค.
2. ํต์ฌ ๊ธฐ๋ฅ: AI ์์ง๋์ด ๊ด์
2.1 JOIN/GROUP BY โ ํ์ต ๋ฐ์ดํฐ์ ์ ๊ธฐ๋ณธ
์ฌ๋ฌ ํ ์ด๋ธ์ ๊ฒฐํฉํด ๋ชจ๋ธ์ด ํ์ต ๊ฐ๋ฅํ ๋จ์๋ก ์ ๊ทํ๋ ๋ทฐ๋ฅผ ๋ง๋ ๋ค.
2.2 ์๋์ฐ ํจ์ โ DB ๋จ ํผ์ฒ ์์ง๋์ด๋ง
LAG/LEAD/RANK ๋ฑ์ผ๋ก ์๊ณ์ดยท์์ ๊ธฐ๋ฐ ํผ์ฒ๋ฅผ ์์ฑํ๋ค. ์) ์ฌ์ฉ์๋ณ ์ง์ ๊ตฌ๋งค ์์ ์ผ๋ก๋ถํฐ์ ๊ฒฝ๊ณผ ์๊ฐ.
SELECT user_id, order_timestamp, EXTRACT(EPOCH FROM ( order_timestamp - LAG(order_timestamp, 1) OVER (PARTITION BY user_id ORDER BY order_timestamp) )) AS time_since_last_order FROM orders;
2.3 ์๋ธ์ฟผ๋ฆฌ/CTE โ ๋ณต์ก๋๋ฅผ ๋จ๊ณํ
๊ฐ๋ ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ ๋์ฌ ํ์ ๊ณผ ์ ์ง๋ณด์๋ฅผ ์ฝ๊ฒ ํ๋ค.
3. ์ํฌํ๋ก์ฐ ์ํฅ
- ํผ์ฒ ์์ง๋์ด๋ง์ ์ค์ฌ ์ด๋: ๋ฌด๊ฑฐ์ด ์ฐ์ฐ์ SQL๋ก ์ฒ๋ฆฌ - ๋ ๋น ๋ฅธ EDA: GROUP BY/COUNT๋ก ๋ถํฌ์ ์ด์์น ์ค๊ณฝ ํ์ - ์ปค๋ฎค๋์ผ์ด์ ๊ฐ์ : ๋ฌธ์ ์ง์ ์ ์คํค๋ง/ํํฐ์ ๋จ์๋ก ๋ช ํํ ์ง์ ๊ฐ๋ฅ