오늘은 파이썬 강의가 지급이 되어서 파이썬 강의를 듣고 ADsP를 간단하게 복습하고 SQL코드카타를 풀었다
파이썬 강의를 통해서 파이썬 내용을 복습을 하였습니다. 강의 내용은 사전 캠프에서 강의한 내용이었지만 튜터님께서 머신러닝과 딥러닝 등 다양한 활용 방법 및 예시를 알려주셔서 더 깊게 이해할 수 있었던 것같다.
그리고 SQL 코드카타를 풀면서 유의미한 내용과 해결방법을 발견하였다.
1. group by로 한가지 칼럼을 그룹핑하고 다른 칼럼에 MAX함수를 사용하더라고 그외의 칼럼들이 MAX함수 결과값 데이터가 포함된 행으로 정렬이 되지 않는다
- 이 사실을 전혀 몰랐고 의심도 해보지 않고 당연히 자동으로 행 데이터가 가져오는 줄 알고 시간을 많이 소비하였다.
- 이 문제를 해결하기 위해서는 서브쿼리문을 사용해서 한번 처리를 해주고 서브쿼리와 본 테이블을 join해서 사용해야한다.
join을 할때, KEY 값을 꼭 한가지가 아니여도 된다.
위 문제를 통해서 내가 쿼리문을 틀리지 않고 잘 작성하였다고 100% 확신을 하더라도 꼭 반드시 무조건 전체 데이터를 확인을 해보고 데이터를 세밀하게 짤라서 확인해봐야 한다.
서브쿼리문을 무조건 사용하지 말고 일단 데이터의 칼럼 구성과 join할 테이블 간의 관계를 잘 살펴보자.
이거는 확실하지는 않는데 프로그래머스의 채점 시스템은 서브쿼리문을 사용하는 것을 좋아하지 않은 것같다.
- 서브쿼리문을 사용하면 서브쿼리를 사용하지 않은 쿼리문과 동일한 과정의 동일한 결과값이 나와도 틀렸다고 말하는 것같다.
- 이거는 내일 맑은 정신으로 코드를 더 세밀하게 뜯어보자
#서브 쿼리문 사용
select WRITER_ID, NICKNAME, 전체주소, 전화번호
from
(
select WRITER_ID, NICKNAME,
concat(CITY, ' ',STREET_ADDRESS1, ' ', STREET_ADDRESS2) as '전체주소',
concat(substr(tlno, 1, 3), '-', substr(tlno, 4, 4), '-', substr(tlno, 7, 4)) as '전화번호',
count(BOARD_ID) as cnt_b
from USED_GOODS_BOARD b
join USED_GOODS_USER u on b.writer_id = u.user_id
group by 1
having cnt_b >= 3
) sub1
order by 1 DESC
#서브쿼리문 사용 X
select a.user_id,a.nickname,
concat(a.city,' ',a.STREET_ADDRESS1,' ',a.STREET_ADDRESS2) as 전체주소,
concat(substr(a.tlno,1,3),'-',substr(a.tlno,4,4), '-',substr(a.tlno,8,4)) as 전화번호
from USED_GOODS_USER a join USED_GOODS_BOARD b
on b.writer_id = a.user_id
group by 1
having count(a.user_id) >=3
order by a.user_id desc;
오늘은 생각보다 얻어가는 것이 많은 하루였다.