๐Ÿ’ SQL/String, Date

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค][SQL] ์กฐ๊ฑด์— ๋งž๋Š” ์‚ฌ์šฉ์ž ์ •๋ณด ์กฐํšŒํ•˜๊ธฐ

์„ ๋‹ฌ 2023. 5. 24. 23:04
๋ฐ˜์‘ํ˜•

https://school.programmers.co.kr/learn/courses/30/lessons/164670

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

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

programmers.co.kr

 

๋ฌธ์ œ

1. USED_GOODS_BOARD์™€ USED_GOODS_USER ํ…Œ์ด๋ธ”์—์„œ

2. ์ค‘๊ณ  ๊ฑฐ๋ž˜ ๊ฒŒ์‹œ๋ฌผ์„ 3๊ฑด ์ด์ƒ ๋“ฑ๋กํ•œ ์‚ฌ์šฉ์ž์˜

3. ์‚ฌ์šฉ์ž ID, ๋‹‰๋„ค์ž„, ์ „์ฒด์ฃผ์†Œ, ์ „ํ™”๋ฒˆํ˜ธ๋ฅผ ์กฐํšŒํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

4. ์ด๋•Œ, ์ „์ฒด ์ฃผ์†Œ๋Š” ์‹œ, ๋„๋กœ๋ช… ์ฃผ์†Œ, ์ƒ์„ธ ์ฃผ์†Œ๊ฐ€ ํ•จ๊ป˜ ์ถœ๋ ฅ๋˜๋„๋ก ํ•ด์ฃผ์‹œ๊ณ ,

5. ์ „ํ™”๋ฒˆํ˜ธ์˜ ๊ฒฝ์šฐ xxx-xxxx-xxxx ๊ฐ™์€ ํ˜•ํƒœ๋กœ ํ•˜์ดํ”ˆ ๋ฌธ์ž์—ด(-)์„ ์‚ฝ์ž…ํ•˜์—ฌ ์ถœ๋ ฅํ•ด์ฃผ์„ธ์š”.

6. ๊ฒฐ๊ณผ๋Š” ํšŒ์› ID๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•ด์ฃผ์„ธ์š”.

 

ํ’€์ด

1๋ฒˆ๊ณผ 2๋ฒˆ ์กฐ๊ฑด์€

group by ์™€ having์„ ์ด์šฉํ•˜์—ฌ USED_GOODS_BOARD๋กœ๋ถ€ํ„ฐ ๊ฒŒ์‹œํŒ์— ๊ฐฏ์ˆ˜๊ฐ€ 3๊ฐœ ์ด์ƒ์ธ ์œ ์ € ์•„์ด๋”” ๋ฝ‘์•„๋‚ด๊ณ 

ํ•ด๋‹น ์œ ์ € ์•„์ด๋””๋ฅผ ๊ฐ€์ง„ ์œ ์ €์ •๋ณด๋ฅผ USED_GOODS_USERS์—์„œ ๋ฝ‘์•„๋ƒˆ๋‹ค

from USED_GOODS_USER
where USER_ID in (
    SELECT WRITER_ID 
    from USED_GOODS_BOARD 
    group by WRITER_ID having count(BOARD_ID) >= 3
)

 

4๋ฒˆ ์กฐ๊ฑด์€ concat ์„ ์ด์šฉํ•˜์—ฌ ๊ฐ ์†์„ฑ๋“ค์˜ ๋ฌธ์ž์—ด ๊ฐ’๋“ค์„ ํ•ฉ์ณ์ฃผ๊ณ 

5๋ฒˆ ์กฐ๊ฑด์€ left,right,substring์„ ์ด์šฉํ•˜์—ฌ ๊ฐ ์†์„ฑ๋“ค์˜ ๋ฌธ์ž์—ด์„ ์ž˜๋ผ์„œ concat์„ ์ด์šฉํ•˜์—ฌ ํ•ฉ์ณ์ฃผ์—ˆ๋‹ค.

concat(CITY, " ", STREET_ADDRESS1, " ", STREET_ADDRESS2) as ์ „์ฒด์ฃผ์†Œ, 
concat(left(TLNO,3), "-", substring(TLNO,4,4), "-", right(TLNO,4)) as ์ „ํ™”๋ฒˆํ˜ธ

 

๊ทธ๋ฆฌํ•˜์—ฌ ๋‚˜์˜จ ๋‹ต

-- ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”
select USER_ID, NICKNAME, 
    concat(CITY, " ", STREET_ADDRESS1, " ", STREET_ADDRESS2) as ์ „์ฒด์ฃผ์†Œ, 
    concat(left(TLNO,3), "-", substring(TLNO,4,4), "-", right(TLNO,4)) as ์ „ํ™”๋ฒˆํ˜ธ
from USED_GOODS_USER
where USER_ID in (
    SELECT WRITER_ID 
    from USED_GOODS_BOARD 
    group by WRITER_ID having count(BOARD_ID) >= 3
)
order by USER_ID desc
๋ฐ˜์‘ํ˜•