[์ค๋์ ํ์ต]
- SQL ์ฝ๋์นดํ (์ค๊ธ 4๊ฐ)
- Python ์ฝ๋์นดํ (์ฝ๋ฉ ํ ์คํธ ์ ๋ฌธ 5๊ฐ)
- ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ/์๊ฐํ ์ธ์ 3ํ์ฐจ
[ํ์ต๋ด์ฉ ์ ๋ฆฌ]
# SQL ์ฝ๋์นดํ
โ๏ธ ์กฐ๊ฑด์ ๋ง๋ ์ฌ์ฉ์ ์ ๋ณด ์กฐํํ๊ธฐ [๐] ๐ด
`USED_GOODS_BOARD`์ `USED_GOODS_USER` ํ
์ด๋ธ์์ ์ค๊ณ ๊ฑฐ๋ ๊ฒ์๋ฌผ์ 3๊ฑด ์ด์ ๋ฑ๋กํ ์ฌ์ฉ์์ ์ฌ์ฉ์ ID, ๋๋ค์, ์ ์ฒด์ฃผ์, ์ ํ๋ฒํธ๋ฅผ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์.
์ด๋, ์ ์ฒด ์ฃผ์๋ ์, ๋๋ก๋ช
์ฃผ์, ์์ธ ์ฃผ์๊ฐ ํจ๊ป ์ถ๋ ฅ๋๋๋ก ํด์ฃผ์๊ณ , ์ ํ๋ฒํธ์ ๊ฒฝ์ฐ xxx-xxxx-xxxx ๊ฐ์ ํํ๋ก ํ์ดํ ๋ฌธ์์ด(-)์ ์ฝ์
ํ์ฌ ์ถ๋ ฅํด์ฃผ์ธ์.
๊ฒฐ๊ณผ๋ ํ์ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
- ๋์ ์ฝ๋ / ์๋
- concat()ํจ์ ์ฌ์ฉํ์ฌ ๋๋ ์ ธ ์๋ ์ปฌ๋ผ์ ํฉ์นจ.
- ๊ธ์ ์ฌ๋ฆฐ ์ฌ์ฉ์๋ฅผ ๋ณด๋ ๋ฌธ์ , inner join ์ฌ์ฉ
- writer_id๋ณ ์
๋ก๋ํ ๊ธ ๊ฐ์๊ฐ 3๊ฐ ์ด์์ธ ์ ์ ํ์
์ํด where ์๋ธ์ฟผ๋ฆฌ ์ฌ์ฉ.
- from USED_GOODS_BOARD as b2
๊ธ ์ ๋ก๋ ๋ณด๋ ํ ์ด๋ธ์์๋ง ํ์ธ - where b2.WRITER_ID = b.WRITER_ID
๋ฐ๊นฅ ์ฟผ๋ฆฌ์์ ํ์ธํ๋ b.WRITER_ID ํ๋์ ๋ํ count ๊ณ์ฐ. - group by b2.WRITER_ID
having count(b2.WRITER_ID) >= 3
having์ ์กฐ๊ฑด ๊ฑธ๊ธฐ ์ํด group by๋ ์ฌ์ฉํ ์ผ์ด์ค.
- from USED_GOODS_BOARD as b2
select
u.USER_ID
, u.NICKNAME
, concat(u.CITY, u.STREET_ADDRESS1, u.STREET_ADDRESS2) as "์ ์ฒด์ฃผ์"
, concat(substr(u.TLNO, 1, 3), "-"
, substr(u.TLNO, 4, 4), "-"
, substr(u.TLNO, 8, 4)) as "์ ํ๋ฒํธ"
from USED_GOODS_BOARD b
join USED_GOODS_USER u
on b.WRITER_ID = u.USER_ID
where b.WRITER_ID = (
select count(b2.WRITER_ID) as cnt_writer
from USED_GOODS_BOARD as b2
where b2.WRITER_ID = b.WRITER_ID
group by b2.WRITER_ID
having count(b2.WRITER_ID) >= 3
)
- ์ ๋ต ์ฝ๋ / ์ค๋ต๋ ธํธ


select
u.USER_ID
, u.NICKNAME
, concat(u.CITY, " ", u.STREET_ADDRESS1, " ", u.STREET_ADDRESS2) as "์ ์ฒด์ฃผ์"-- full address
, concat(substr(u.TLNO, 1, 3), "-"
, substr(u.TLNO, 4, 4), "-"
, substr(u.TLNO, 8, 4)) as "์ ํ๋ฒํธ"
from USED_GOODS_BOARD b
join USED_GOODS_USER u
on b.WRITER_ID = u.USER_ID
where b.WRITER_ID = (
select c.WRITER_ID
from (
select
b2.WRITER_ID
, count(b2.WRITER_ID) as cnt_writer
from USED_GOODS_BOARD as b2
where b2.WRITER_ID = b.WRITER_ID
group by b2.WRITER_ID
having count(b2.WRITER_ID) >= 3
) c
)
group by u.USER_ID
order by u.USER_ID desc;
โ๏ธ 5์ ์ํ๋ค์ ์ด๋งค์ถ ์กฐํํ๊ธฐ [๐]
`FOOD_PRODUCT`์ `FOOD_ORDER` ํ
์ด๋ธ์์ ์์ฐ์ผ์๊ฐ 2022๋
5์์ธ ์ํ๋ค์ ์ํ ID, ์ํ ์ด๋ฆ, ์ด๋งค์ถ์ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์.
์ด๋ ๊ฒฐ๊ณผ๋ ์ด๋งค์ถ์ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด์ฃผ์๊ณ ์ด๋งค์ถ์ด ๊ฐ๋ค๋ฉด ์ํ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
- ๋์ ์ฝ๋ / ์๋
- ์ปฌ๋ผ price์ ์ปฌ๋ผ amount๋ฅผ ๊ณฑํ์ฌ ์ด๋งค์ถ ๊ณ์ฐ
- ์ฃผ๋ฌธ์ด ์๋ ๋ฐ์ดํฐ๋ ๋ณด๊ธฐ ์ํด `left join`, `and` ์กฐ๊ฑด์ผ๋ก "2022-05"์ ์ฃผ๋ฌธํ row ํํฐ๋ง
- product_id์ product_name์ ๋งค์นญ๋๋ ์ปฌ๋ผ์ด๋๊น, `group by` ๋ product_id๋ก๋ง.
select
p.PRODUCT_ID
, p.PRODUCT_NAME
, p.PRICE * o.AMOUNT as TOTAL_SALES
from FOOD_PRODUCT p
left join FOOD_ORDER o
ON p.PRODUCT_ID = o.PRODUCT_ID
AND o.PRODUCE_DATE like "2022-05%"
group by p.PRODUCT_ID
order by TOTAL_SALES desc, p.PRODUCT_ID
- ์ ๋ต ์ฝ๋ / ์ค๋ต๋
ธํธ
- ์ง๊ณํจ์(sum()) ๋นผ๋จน์.
๋ฐ๋ณด๋? - ๋ ์ง ๊ธฐ๊ฐ์ `like`๋ณด๋จ `between and`๊ฐ ๋ ์์ .
- ์ง๊ณํจ์(sum()) ๋นผ๋จน์.
select
p.PRODUCT_ID
, p.PRODUCT_NAME
, sum(p.PRICE * o.AMOUNT) as TOTAL_SALES
from FOOD_PRODUCT p
left join FOOD_ORDER o
ON p.PRODUCT_ID = o.PRODUCT_ID
where o.PRODUCE_DATE between "2022-05-01" and "2022-05-31"
group by p.PRODUCT_ID, p.PRODUCT_NAME
order by TOTAL_SALES desc, p.PRODUCT_ID
[๋ด์ผ์ ํ์ต]
๋ด์ผ ์ฃผ ๋ชฉํ: ์๊ฐํ ๋ฐฐ์ฐ๊ธฐ ์ , ๋ ๋ณต์กํด์ง๊ธฐ ์ ์ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ ํจ์ ์ฌ์ฉ์ ์ต์ํด์ง๊ธฐ!
- ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ/์๊ฐํ ์ธ์ 4ํ์ฐจ
- ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ ์ฐ์ต (w. Claude)
- SQL, Python ์ฝ๋์นดํ

