티스토리 뷰

SQL 코드카타

Q41. 조건에 맞는 도서 리스트 출력하기

1. 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/144853

2. 정답 코드:

SELECT
    BOOK_ID,
    SUBSTR(PUBLISHED_DATE, 1, 10) AS PUBLISHED_DATE
FROM BOOK
WHERE SUBSTR(PUBLISHED_DATE, 1, 4) = '2021'
  AND CATEGORY = '인문'
ORDER BY PUBLISHED_DATE ASC;

 

Q42. 평균 일일 대여 요금 구하기

1. 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/151136

2. 정답 코드:

SELECT
ROUND(AVG(DAILY_FEE), 0)  AS AVERAGE_FEE
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE = 'SUV';

 

Q43. 조건에 맞는 사용자와 총 거래금액 조회하기

1. 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/164668

2. 정답 코드:

SELECT
    u.USER_ID,
    u.NICKNAME,
    SUM(b.PRICE) AS TOTAL_SALES
FROM USED_GOODS_BOARD AS b
JOIN USED_GOODS_USER AS u
  ON b.WRITER_ID = u.USER_ID
 AND b.STATUS = 'DONE'
GROUP BY u.USER_ID
HAVING SUM(b.PRICE) >= 700000
ORDER BY TOTAL_SALES ASC;

 

Q44. 가격대 별 상품 개수 구하기

1. 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/131530

2. 정답 코드:

SELECT 
    (PRICE DIV 10000) * 10000 AS PRICE_GROUP, 
    COUNT(*) AS PRODUCTS
FROM PRODUCT
GROUP BY PRICE_GROUP
ORDER BY PRICE_GROUP ASC;

3. 오류 상황: 결과 화면에서 PRICE_GROUP이 0에 해당되는 데이터의 수가 많고, 0이라고 표시가 안됨

4. 시도 방법: RAW DATA를 확인해서 PRICE 구간을 재확인함

5. 최종 문제 해결 방법: 40000원 이상인 데이터들은 처리가 제대로 되지 않아 0 구간의 숫자가 이상하게 표시된 것이었음

→ DIV 함수를 사용해야 함! DIV는 나눗셈의 몫만 구하는 함수 ex. 15000 DIV 10000 = 1

SELECT
    CASE
        WHEN PRICE >= 0 AND PRICE < 10000 THEN 0
        WHEN PRICE < 20000 THEN 10000
        WHEN PRICE < 30000 THEN 20000
        WHEN PRICE < 40000 THEN 30000
    END AS PRICE_GROUP,
    COUNT(PRODUCT_ID) AS PRODUCTS
FROM PRODUCT
GROUP BY PRICE_GROUP
ORDER BY PRICE_GROUP ASC;

# 오류 쿼리 : CASE WHEN 문으로 모두 커버 불가능

오류 쿼리 실행 결과

 

Q45. 3월에 태어난 여성 회원 목록 출력하기

1. 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/131120

2. 정답 코드:

SELECT
    MEMBER_ID,
    MEMBER_NAME,
    GENDER,
    SUBSTR(DATE_OF_BIRTH, 1 ,10) AS DATE_OF_BIRTH
FROM MEMBER_PROFILE
WHERE SUBSTR(DATE_OF_BIRTH, 6, 2) = '03'
  AND GENDER = 'W'
  AND TLNO IS NOT NULL
ORDER BY MEMBER_ID ASC;

라이브 세션) Python 기초 강의 1일차 - 수업날 [입출력, 변수, 문자열]

1) 입출력

  • 엔터 = '\n' 또는 '₩n'

print(f"... {변수} ...") - 변수 출력 형태 지정

money = 1234567
print(f"가격은 {money:,}원입니다.")

가격은 1,234,567원입니다.
pi = 3.141592
print(f"원주율은 {pi:.2f}입니다.")

원주율은 3.14입니다.
문장에 중괄호를 진짜로 출력하고 싶으면 {{ }} 처럼 두 번 써야 함!
ex. {중괄호} 이렇게 출력하고 싶으면 {{중괄호}} 이렇게 입력
1e3 = 1000.0 (10^3)

01. 미니 프로젝트: "안전한 계산기" 만들기

목표

사용자가 두 수를 입력하면 아래를 출력합니다.

  • 합, 차, 곱, 나눗셈(실수)
  • 입력이 이상하면 친절한 안내를 출력하고 끝내기
  • 0으로 나누면 멈추지 않게 처리하기

입력 형식

아래 중 어떤 형식이든 받도록 해 봅시다(가능하면):

  • 10 3 (공백)
  • 10,3 (쉼표)
  • 10#3 (#)

힌트:

  1. 입력 문자열에 ,가 있으면 split(',')
  2. 아니면 #가 있으면 split('#')
  3. 아니면 split() (공백)

아래 코드를 완성해 보세요.

s = input("두 수를 입력하세요 (예: 10 3 / 10,3 / 10#3): ")

try:
  
# TODO: 구분자 선택
    if ',' in s:
      s2 = s.split(',')
    elif '#' in s:
      s2 = s.split('#')
    else:
      s2 = s.split()

# TODO: 숫자 변환(필요하면 strip, replace 등)
    a, b = map(int, s2)

# TODO: 합/차/곱/나눗셈 출력
    print(f'합: {a + b}')
    print(f'차: {a - b}')
    print(f'곱: {a * b}')
    print(f'나눗셈: {a / b}')

# TODO: ValueError, ZeroDivisionError 처리
except ValueError:
     print("입력 형식이 잘못되었습니다! (예: 10 3 / 10,3 / 10#3)")
except ZeroDivisionError:
     print("0으로는 나눌 수 없습니다!")

실행 결과


2) 변수

  • 하이닉스 - 변수
  • 10000 - 
  • 변수 이름은 숫자로 시작하면 안됨, 중간에 공백 불가

변수 타입

  • integer : int 정수형
  • float : flt 실수형(.소수점 있는 숫자)
  • string : str 문자열형 (””로 둘러싸임)

02. 미니 프로젝트: "용돈 계산기" (변수 총정리)

아래 셀을 완성해 보세요.

# TODO: 값은 자유롭게 바꿔도 됩니다.
allowance = 50000
snack = 12000
transport = 15000
game = 8000

# TODO 1: 총 지출 계산
total_spent = snack + transport + game

# TODO 2: 남은 돈 계산
remaining = allowance - total_spent


print('총 지출한 돈 =', total_spent)
print('남은 돈 =', remaining)

실행 결과


3) 문자열

x="abcdef"

print(x[0:3]) #0번째(포함O)~3번째(포함X) #abc
print(x[:3]) #0번째(포함O)~3번째(포함X) #abc
print(x[1:]) #1번째(포함O)~마지막까지 #bcdef

x[-1] = "f" #마지막 글자
x[-2] = "e" #뒤에서 두 번째
s = "abcdefg" #[start:end:step]
print("[::-1] 뒤집기:", s[::-1])
-----------------------------------------------
[::-1] 뒤집기: gfedcba

문자열[start : end : step]

x = "abcdefghijklmnop"
print(x[0:-1:2])
-----------------------------------------------
acegikmo
  • 뒤에서 두칸씩의 시작 점은 마지막 글자인 n부터!


  • ₩t (탭키) 가 여러개 있더라도 제거됨


  • 가운데에 있는 공백은 strip으로 지울 수 없음!


  • split은 리스트 [ 'a', 'b', 'c' ] 이런 형태
  • join은 문자열 'a/b/c' 이런 형태


  • 리스트로 join 하려고 하면 문자열이 아니기 때문에 오류가 발생한다! → 리스트를 str으로 바꿔서 join


  • H가 0번째이므로, 공백까지 포함했을 때 P는 6번째


03. 미니 프로젝트: "문장 정리기" 만들기

목표

사용자에게 문장을 입력받아, 아래를 출력하는 프로그램을 만드세요.

  1. 양쪽 공백 제거(앞뒤)
  2. 모두 소문자로 바꾸기
  3. 쉼표 ,를 공백으로 바꾸기

아래 셀을 완성해 보세요.

text = input("문장을 입력하세요: ")

# TODO 1: 공백 제거
text1 = text.strip()
print("공백 제거: ", text1)

# TODO 2: 소문자 변환
text2 = text1.lower()
print("소문자 변환: ", text2)

# TODO 3: 쉼표를 공백으로 바꾸기
text3 = text2.replace(",", "")
print("쉼표를 공백으로 바꾸기: ", text3)

실행 결과


Python 강의를 처음 들었는데, 짧은 기간 안에 많은 내용을 학습해야 하는 만큼 분량이 상당히 많게 느껴졌다. 이전에 Python을 얕게나마 공부한 경험이 있음에도 불구하고, 이해가 잘 되지 않는 부분들도 있었다.

라이브 세션만으로는 부족할 수 있을 것 같아, 녹화 강의를 함께 활용하며 내용을 놓치지 않도록 꾸준히 예/복습해야겠다는 생각이 들었다. 또한 Python 학습과 병행해 SQL 코드카타도 꾸준히 챙기며 기본기를 다져야겠다고 느꼈다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함