55번 - 조건에 맞는 사용자 정보 조회하기
USED_GOODS_BOARD와 USED_GOODS_USER 테이블에서 중고 거래 게시물을 3건 이상 등록한 사용자의 사용자 ID, 닉네임, 전체주소, 전화번호를 조회하는 SQL문을 작성해주세요. 이때, 전체 주소는 시, 도로명 주소, 상세 주소가 함께 출력되도록 해주시고, 전화번호의 경우 xxx-xxxx-xxxx 같은 형태로 하이픈 문자열(-)을 삽입하여 출력해주세요. 결과는 회원 ID를 기준으로 내림차순 정렬해주세요.
<나의 풀이>
select b.user_id,
b.nickname,
concat(b.city, ' ', b.street_address1, ' ', b.street_address2) '전체주소',
concat(substr(b.tlno,1,3), '-', substr(b.tlno,4,4), '-', substr(b.tlno, 8, 4)) '전화번호'
from used_goods_board a inner join used_goods_user b on a.writer_id=b.user_id
group by 1
having count(b.user_id) >= 3
order by 1 desc
INNER JOIN을 통한 문제 해결
- 조회 : user_id, nickname, 전체주소, 전화번호
- 전체주소는 시, 도로명 주소, 상세주소가 함께 출력되어야 하므로 concat() 함수를 이용하여 필요한 컬럼들과 중간에 있는 ' '은 문자마다 띄어쓰기를 위함
- 전화번호는 하이픈 문자열(-)을 삽입하여 출력해야하기 때문에 1)concat()으로 하이픈 문자열이 나오도록 함 2) substr()을 통해 문자열이 몇번부터 몇번까지 나오게 할 것인지를 정함
- user_id를 기준으로 그룹화를 해주고
- 조건: having절을 통해 count 함수를 통해 구한 B 테이블의 user_id 개수가 3개 이상인 경우에만 그룹화하도록 함
- 순서: user_id를 기준으로 내림차순
concat() - 두개 이상의 문자열을 입력받아, 그것들을 순서대로 결합하여 하나의 문자열로 반환
CONCAT(문자열1, 문자열2 , 문자열3 ...)
substr() - 특정 문자열의 부분 문자열을 추출
SUBSTR(string, start_position, length)
이번 문제는 좀 많이 헷갈렸다 .. ㅎㅎ 오랜만에 SQL에서도 풀기 어려운 문제가 나오니까 당황아닌 당황을 했다
이 문제를 풀면서 아 아직도 나는 SQL에 대한 기초나 지식이 부족하고 약하구나를 깨달았고 파이썬 만큼은 아니더라도 꾸준하게 계속 공부를 해줘야겠다는 생각이 들었다 ! 곧 8월에 SQLD 시험도 있을테니 힘내자 !!
'✨Today I Learned > MySQL' 카테고리의 다른 글
[MySQL] 자동차 대여 기록에 장기/단기 대여 구분하기 (1) | 2024.07.22 |
---|---|
SQL codekata 58번 - 취소되지 않은 진료 예약 조회하기 (0) | 2024.07.16 |
사전캠프 10일차 - SQL 5주차 정리 / SQL 코드카타 11번~19번 (0) | 2024.06.07 |
사전캠프 9일차 - SQL 5주차 강의 정리, SQL 코드카타 2번~10번 (0) | 2024.06.05 |
사전캠프 - SQL 4주차 강의 정리 (0) | 2024.06.04 |