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

[내일배움캠프] 9일 차 - SQL 코드카타, Python 알고리즘 코드카타, SQLD

554083460 2025. 5. 22. 19:09

 

 

 

 SQL 코드카타

 

 

문제 23

중성화 여부 파악하기

 

 

처음 답안

SELECT ANIMAL_ID,
       NAME,
       IF(SEX_UPON_INTAKE LIKE '%Neutered%'
       OR SEX_UPON_INTAKE LIKE '%Sprayed%', 'O', 'X' ) AS '중성화' -- 오타, 'Spayed'가 맞다
FROM ANIMAL_INS;

 

최종 답안

SELECT ANIMAL_ID,
       NAME,
       CASE WHEN SEX_UPON_INTAKE LIKE '%Neutered%' then 'O' -- IF 대신 CASE WHEN 사용
            WHEN SEX_UPON_INTAKE LIKE '%Spayed%' then 'O' -- 오타 수정
            ELSE 'X' END AS '중성화'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;

 

 

틀린 이유

'spayed'를 'sprayed'라고 오타냄

 

개선점

[MySQL] 조건이 하나일 때는 IF 사용, 조건이 여러 개일 때는 CASE WHEN 사용

이 문제의 경우 IF문으로 처리해도 문제없었지만

조건이 여러 개일 때는 CASE WHEN을 사용하는 것이 더 깔끔하다고 느껴진다.

SELECT ANIMAL_ID,
       NAME,
       IF(SEX_UPON_INTAKE LIKE '%Neutered%'
       OR SEX_UPON_INTAKE LIKE '%Spayed%', 'O', 'X' ) AS '중성화'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;

 

 

 

 Python 알고리즘 코드카타

 

 

문제 16

x만큼 간격이 있는 n개의 숫자

 

 

처음 답안

def solution(x, n):
    answer = []
    for i in range(1, n+1):
        answer += i*x   #int object is not iterable 오류
    return answer

 

최종 답안

def solution(x, n):
    answer = []
    for i in range(1, n+1):
        answer.append(x*i)
    return answer

 

틀린 이유

리스트에 원소를 추가할 때 '+=' 사용

 

개선점

리스트에 원소를 추가할 때는 listname.append(추가할 값) 쓴다.

 

새롭게 알게 된 것

1. for loop + list에 원소 추가

 

템플릿

answer = []
for i in range(1, n, 2):
    answer.append(i)
print(answer)

 

 

 

2. for loop + string에 문자열 이어붙이기


템플릿

answer = ''
for i in range(1, n):
    answer += str(i)
print(answer)

 

 

3. for loop + integer에 특정 값 연산하기


템플릿

answer = 1
for i in range(1, n, 4):
    answer *= i
print(answer)

 

 

 

 SQLD

 

 

더보기

NULL

- 값이 정해지지 않은 상태

- 공백이나 숫자 0과는 전혀 다르다

- 집계함수는 NULL 값을 제외하고 처리한다.

- 사칙 연산 시 NULL과 함께 하면: 대부분 NULL

 

본질식별자(Natural Key)와 인조식별자(Surrogate Key)

- 본질식별자

자연스럽게 만들어진 식별자

데이터 자체에 들어 있음

복합 본질식별자는 복잡성 증가할 수 있음

예시) 주민등록번호

 

- 본질식별자의 단점

길이와 복잡성

갱신 연산 부하

 

- 인조식별자

외부에서 임의로 지정해서 만들어진 식별자

데이터 일관성 유지

복합 본질식별자의 복잡성 피할 수 있음

 

- 인조식별자의 단점

비즈니스 의미 부족

추가적인 인덱스 관리

인덱스 낭비

 

- 문제1: 중복 데이터로 인한 품질 문제

외부 식별자 사용해도 중복 데이터를 막을 수 없다.

데이터 일관성 문제

데이터 정확성 문제

검색 및 분석의 어려움

자원 낭비

오류 가능성 증가

 

- 문제2: 불필요한 인덱스 생성

인덱스란? DB가 데이터를 빠르게 찾기 위해 순서를 유지하고 있는 데이터