[내일배움캠프] 데이터 트랙/본 캠프

[내일배움캠프] 5일 차 - Python 알고리즘 코드카타, SQL 코드카타, 직무 발표 피드백

554083460 2025. 5. 16. 20:25

 

 

 

 Python 알고리즘 코드카타

 

 

문제 3

몫 구하기

 

 

내 답안

def solution(num1, num2):
    answer = num1 // num2
    return answer

 

새롭게 알게 된 것

1. 몫만 남기고 싶을 때: //

2. 나머지: %

3. 나눗셈: /  (float)

 

 

 

 SQL 코드카타

 

 

문제 6

동명 동물 수 찾기

동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요. 

이떄 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회해 주세요.

 

 

내 처음 답안

SELECT NAME,
       COUNT(NAME) AS COUNT
FROM ANIMAL_INS
WHERE NAME IS NOT NULL  
AND COUNT > 1 -- WHERE절에 COUNT > 1 조건을 넣음
GROUP BY NAME
ORDER BY NAME;

 

내 최종 답안

SELECT NAME,
       COUNT(NAME) AS COUNT
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
GROUP BY NAME
HAVING COUNT > 1 -- HAVING 절에 COUNT > 1 조건을 넣음
ORDER BY NAME;

 

틀린 이유

순서를 잘못 설정해서 에러가 났다.

 

문제는

1) NAME으로 GROUP BY 하고,

2) 같은 이름끼리 묶은 다음 COUNT로 개수를 세고,

3) 개수 센 결과 중 1보다 큰 값만 남기는 흐름이다. (중복된 이름만 남기라고 했으므로)

 

3)이 제대로 실행되려면 GROUP BY 이후에 실행되어야 한다.

SQL 쿼리 실행 순서는 WHERE가 먼저이고, 그 다음이 GROUP BY이다.

처음에는 WHERE 절에 3)에 해당하는 조건 넣어서 조건이 GROUP BY 이전에 실행되었다.

 

개선점

조건을 넣을 때

개별 행(row)에 조건 걸 때 → WHERE 

그룹화(GROUP BY) 결과에 대해 조건 걸 때 → HAVING

 

새롭게 알게 된 것 (사전캠프 7일 차 TIL 자료 가져옴)

1. SQL 작성 순서와 SQL 실행 순서가 다르다. 

SQL 작성 순서

SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
LIMIT

 

SQL 실제 실행 순서 (gpt)

1 FROM 어떤 테이블에서 데이터를 가져올지 결정
2 WHERE 가져온 데이터에서 행(row) 필터링
3 GROUP BY 필터링된 데이터를 그룹화
4 HAVING 그룹화된 결과를 다시 조건으로 필터링
5 SELECT 원하는 컬럼(또는 집계 함수)을 계산
6 ORDER BY 결과를 정렬
7 LIMIT 결과에서 일부 행만 출력

 

 

2. HAVING

 

설명

GROUP BY로 그룹 만든 데이터에 조건 부과한다.

보통 집계 함수와 함께 사용: COUNT, MIN, MAX, SUM, AVG

 

문법

SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
HAVING condition
ORDER BY column_name(s);

 

예시

SELECT COUNT(customer_id),
       country
FROM customers
GROUP BY country
HAVING COUNT(customer_id) > 3
ORDER BY COUNT(customer_id);

 

WHERE와 HAVING의 차이점 (gpt 검색 후 정리)

  WHERE HAVING
적용 시점 GROUP BY 이전 GROUP BY 이후
조건 대상 개별 행(row)에 대해 조건 걸 때 사용 집계한 결과에 대해 조건 걸 때 사용
사용 대상 원본 데이터 집계 함수를 사용한 결과
언제 주로
쓰이는가?
데이터가 집계되기 전에 조건 적용할 때 이미 집계된 결과에 조건 적용할 때

 

참고 자료

https://www.w3schools.com/sql/sql_having.asp

 

 

3. SQL에서 중복값 찾는 법 템플릿

 

1) 1개 열 안에서의 중복값

GROUP BY 절 사용: 중복값 존재하는지 확인하고 싶은 열 기준으로 GROUP BY

COUNT에 GROUP BY와 같은 열 넣기

HAVING절에 COUNT 함수 사용: GROUP BY의 결과가 1개 초과인지 확인 

 

2) 2개 열에 중복값이 있을 때

GROUP BY 절 사용: 중복값 존재하는지 확인하고 싶은 2개의 열 모두 GROUP BY

COUNT에 GROUP BY와 같은 열 넣기 → NULL은 제외하고 세어줌

또는 * 넣기 → NULL까지 세어줌

HAVING절에 COUNT 함수 사용: GROUP BY의 결과가 1개 초과인지 확인 

 

예시

order_id 14로 동일, product_id 19로 동일한 행이 2개일 때

SELECT order_id,
       product_id,
       COUNT(*) -- 2개 열이라서 *을 쓴 것이 아니다!
FROM order_details
GROUP BY order_id, product_id
HAVING COUNT(*) > 1;

 

참고자료

번역: https://kimsyoung.tistory.com/entry/SQL%EC%97%90%EC%84%9C-%EC%A4%91%EB%B3%B5%EA%B0%92-%EC%B0%BE%EB%8A%94-%EB%B0%A9%EB%B2%95

원문: https://learnsql.com/blog/how-to-find-duplicate-values-in-sql/

 

 

 

 직무 스터디 발표 피드백

 

 

우리 조 (3조) 피드백

 

신한결 튜터님

업무 프로세스를 짚은 점이 좋았다.
도메인 지식 살펴본 것 좋다. 도메인 지식은 기본이다.

 

허진성 튜터님

ppt 칭찬 받았다!

직무 공고 분석을 먼저 하고, 그것을 바탕으로 나에게 어떤 능력이 필요한지 파악하는 것이 좋다.

 

다른 조 피드백에서 참고할 점

- 지원자격은 기본, 우대사항을 다 충족할 수는 없지만 무기 하나는 가지는 것 추천한다.

- 데이터 사이언티스트 역량의 기본기는 수학, 통계학 지식이다.

- 데이터 분석가는 결국에 비즈니스에 기여해야 한다. (내 생각: 이윤 극대화?)