카테고리 없음

[TIL 21] QCC를 풀며 알게 된 문법적 오류....

LHJ_ 2024. 12. 13. 22:33

알고리즘 코드카타 : 자리수 더하기

내가 푼 코드
팀원이 푼 코드
def solution(n):
    b=0
    while n>0:
        a = n%10
        n=n//10
        b=a+b
    return b
def solution(n):
    answer = sum(int(i) for i in str(n))
    return answer

=> 아니 어떻게 이런 생각을!?!?!?!?
str()한 숫자는 각 개별로 문자가 됨

 

QCC

1번

내가 푼 코드 정답 코드
 
아니 개똥망임
정답은 똑같지만..
1. 서브브쿼리를 쓸데 없이 썼음

2. 행 개별씩 보는거라 GROUP BY 해줄 필요가 없었음
3. 그 때문에 HAVING 또한 필요없음....
어떤 특정 그룹의 행의 개수를 보고 싶은 것이 아니었음
4. count(name)과 같은 코드를 짰는데 그럴거면 GROUP BY에 고유 코드 값이 있는 Code를 넣는게 더 나았음...차라리....젠장!
 

2번

내가 푼 코드
문제점
출력 코드가 정답이랑 같았지만 문제의 의도에 맞게 풀지 않았음.

SQL의 기본적인 문법을 무시하고 있고, 가독성이 좋지 않음.
(SELECT에 집계 함수 외의 컬럼을 모두 GROUP BY에 넣어줘야하는데 그렇지 않고 있음)

이런 쿼리를 짠 이유
서브 쿼리에서 MAX() 값을 구하고 원래 테이블과 JOIN한 후 국가에서 인구가 가장 많은 도시를 구하려고 했음. 하지만, 순간 MAX() 값으로 원하는 테이블을 만드는 방법이 떠오르지 않아 당황하며 시간에 좇기다가 정답만 맞추자고 급하게 끼워맞춘 쿼리..

문제가 일어난 원인
1. 가장 많은 인구수를 구한 후(집계함수의 값을 WHERE절에 바로 넣지 못하니 먼저 계산 해주기 위해 서브 쿼리에 넣어준다),

2. 마지막에 원하는 컬럼을 출력을 해야하는데, 처음부터 원하는 컬럼을 출력하려고 해서 일어난 문제.

3. 각 대륙에서 인구가 가장 많은 도시< 부분을 어떻게.. 나눠서 해석해야할지 몰랐던 것 같음.
대륙 내부에 도시가 있는 거기 때문에 도시에서 가장 많은 인원수와 도시에서 가장 많은 인원수가 동일함.
하지만 이 부분을 놓쳤기 때문에 처음 논리 구조를 생각할 때 애를 먹은 듯 함.
아.. 이래서 max 값과 뭘 연결해야 할지 몰랐던거구나......
다시 푼 코드
처음에 생각했던 MAX()를 구한 후 그 값과 일치하는 행을 출력.
MAX() 값과 원래 테이블을 이어주기 위해서 JOIN 사용

처음에 WHERE 절로 MAX()에서 구한 대륙에서 가장 많은 인원과 도시의 인원이 같고, 대륙 내에서 같아야하기 때문에 대륙끼리 같아야 한다는 조건을 걸었음.

하지만 WHERE로 걸어주면 숫자가 고유하지 않으면 문제가 생길 수 있기 때문에 ON에서 둘이 같은 테이블만! 조인하게 함.

ON과 JOIN이 끝나고 실행되는 WHERE은 테이블이 만들어진 후 각 개별 행을 확인하며 필터링 하고,
ON은 테이블을 만들 때! ON 조건에 있는 테이블만 생성함.

INNER JOIN할 때 문제가 없지만, OUTER JOIN을 하게 된다면 각 개별행을 필터하는 WHERE은 NULL값이 날아가기 때문에 ON으로 하는 것이 좋음
아직 예시 테이블을 만나지 않아 잘 모르겠음.
=> ON과 WHERE이 하는 역할이 비슷함.

GROUP BY 쓰지 않는 이유
느낀점 적다가 갑자기 순간 어..GROUP BY로 Continent를 묶고 조건을 max랑 같은 인원을 묶으면 되지 않나? 라고 생각해서 까먹기 전에 적음.

위에서도 적었지만 GROUP BY 를 쓸거면 집계함수 외의 모든 컬럼을 그룹핑 해줘야함

흠 근데 집계함수가 없잖아.. 괜찮지 않나? 어?..
어 뭐지 출력하니까 되네 뭐지? ???? ...?.. 1번 GROUP BY도 이런식으로 했는데 험.... 여쭤봐야겠음.

문법대로 안 하면 오류나는 DB에다가 하니까 오류남. 집계 함수가 없어도 무조건 SELECT에 있고 집계함수 외의 컬럼은 GROUP BY 해줘야 함. 또 까먹지 말라고 위에 적어둠.

자세한 사항은 이곳을 참조
https://velog.io/@crosstar1228/SQL-join%ED%95%A0%EB%95%8C-on-%EA%B3%BC-where%EC%9D%98-%EC%B0%A8%EC%9D%B4

 

 

 

더보기

너무너무 힘들다.... QCC라고 해서 첨엔 별 생각 없었는데, 시험이 시작되니까 엄청 떨렸음. 생각보다 많이 긴장하고 있었던 것 같음. 걍 시험 본다는 사실이 안 와닿았었나 봄. 멘탈 관리를 열심히 하자.

 

GROUP BY와 JOIN 개념을 혼동하고 있는 것 같음. 다시 정리하기.

2번은 윈도우 함수로 풀 수 있는데 조금 시간이 지난 후 다시 확인하기.

코드카타에서 2번에서 비슷한 문제를 윈도우 함수와 서브 쿼리로 정답을 보지 않고 혼자 풀어보기.

파이썬 함수와 클래스가 이해가 안 됨. 40퍼 정도 이해한 듯..... 다시 공부...에효...

문해력 책 꼭 읽고 제발....

주말에도 한문제라도 코드카타 풀고...

wil 꼭 작성하고...

또 뭐 있었던 거 같은데.... 꼭 하기...