기타/Python

250605_파이썬(자료형 반복학습)

baektree 2025. 6. 5. 21:05

학습할 때 마다 새롭게 느껴지는 개념들

보고 또 봐도 마치 처음 보는 사람마냥 낯선 파이썬 친구 하하하하하 ^^

그래서 이 파이썬 친구와 어떻게 하면 친해질까 고민이 참 많은데...뭐가 정도인지 모르겠어서 그냥 하고 있다.

 

한편 요근래 공부란 무엇인지, 공부를 하는 태도, 효과적인 공부방법을 검색해 보았는데  

그 중에서 유의미했던 팁들을 떠올려보자면 다음과 같다.

- 자신의 언어로 치환해보는 복습 

- 학습 내용을 현실에 적용했을 때의 보람 > 학습 욕구 상승 > 정진 

 

최근 많은 시간을 할애했음에도 큰 변화가 없는 것 같아 낙담하기도 했다.

그럼에도 난 이 분야를 더 알고 싶고, 잘하고 싶은 마음이 가득하기에 욕심을 내려놓고 차근차근 밟아가기로 마음을 고쳐먹었다.

자고로 새로운 언어에숙해지는데는 시간이 소요되며, 난 이 분야의 비기너니까 지금 이 혼돈 또한 지극히 정상이라 생각된다.

중요한건 꾸준함이니 계속해서 한 걸음 나아가보자고~! 오예~

 

요약/나만의 인사이트

  1. SQL 서로 다른 품목 동시구매의 경우! > DISTINCT를 활용하자!
    1. WHERE 절을 이용해 해당 품목(a,b)들로 필터링 하고
    2. GROUP BY 절을 이용해 아이디 별로 묶었을 때
    3. 조합이 (a,a) (a,b) (a,a,b) (b,b) (b,a,b)등 다양할 수 있음
    4. 그 때 COUNT(DISTINCT NAME)을 쓰면 중복 된거 제거하고 고유값 세는 거니까
    5. COUNT(DISTINCT NAME) =2 를 통해 서로다른 품목 동시구매조건을 알 수 있음

새롭게 알게 된 것

  • v-code 터미널에서 python day1.py 입력 → day.py 전체가 실행 됨.
  • input을 사용하면 문자형으로 출력된다.
  • set은 순서가 없고 중복을 허용하지 않는다.
  • del은 완전 삭제를 의미한다.
  • 탈출문자 : 역슬래시(\)와 특정문자(숫자)의 조합으로 표현할 수 없는 기능이나 문자를 표시 \’
  • 줄 나누기 : print('사실\\n감자도\\n맛있어요.')
  • 불리언은 True, False인 자료형이다.
  • 파이썬 자료형 비교하기

리스트 튜플 딕셔너리 집합

시퀀스 o o x x
인덱싱/슬라이싱 o o o( 단, key 기준) x
추가/수정/삭제 o x o o
중복허용 o o o(단, key는 중복 안됨) x
key-value x x o x

특히 어려웠던 것

  • SQL 동시구매 문제
    • 내가 접근한 방법
      • 문제
        • 우유와 요거트를 동시에 구입한 장바구니의 아이디를 조회하는 SQL 문을 작성해주세요. 이때 결과는 장바구니의 아이디 순으로 나와야 합니다.
      • 나의 접근법
        1. CASE WHEN 함수를 사용하여 우유, 요거트를 1로 치환한다.
        2. 그것을 milk_yogurt 컬럼으로 만든다.
        3. GROUP BY CART_ID 묶어서 동시에 구매한 경우(SUM ≥2) 만 필터링한다. 이때 HAVING을 사용한다.
      • 왜 틀렸는지
        • 엇 그런데 ‘우유-우유’ , ‘요거트-요거트’도 합계가 2개 이상일텐데.. 어떡하지?
      • 튜터님의 도움받아 다르게 풀기
        • KEY POINT
          • 우유컬럼, 요커트 컬럼 각각 따로 만들기
          • WIHT 절로 묶기 (CTE 만들기), 임시테이블로 쓰기
          • 새로운 쿼리문에서 cart별 우유컬럼, 요거트컬럼 sum으로 집계하기
          • 그리고 두가지 컬럼 모두 0 이상이면 동시에 구매한 조건 만족!
            • 잠깐 WIHT 절이란? (= Common Expression Table)
              • 실제로 테이블을 형성하지 않은 임시적인 쿼리 결과셋이다.
              • 임시 테이블처럼 참조할 수 있다.
              • 복잡한 쿼리문을 분리해서 가독성을 높일 수 있다.
      • 코드
      WITH A AS
      (SELECT CART_ID,
              NAME,
              IF(NAME='Milk', 1, 0) AS milk,
              IF(NAME='Yogurt', 1, 0) as yogurt
      FROM CART_PRODUCTS)
      
      SELECT CART_ID
      FROM A 
      GROUP BY CART_ID
      HAVING SUM(milk) > 0 AND SUM(yogurt) > 0 
      ORDER BY 1
      
    • 다른 사람이 접근한 방법
SELECT CART_ID 
FROM CART_PRODUCTS 
WHERE NAME REGEXP 'Milk|Yogurt' 
GROUP BY CART_ID HAVING COUNT(DISTINCT NAME) >= 2 -- REGEXP 'Milk|Yogrut' : 우유 또는 요거트가 포함된 행만 필터링 -- COUNT(DISTINCT NAME) >= 2 : 구별된 네임이 2개이상(group by로 합쳤으니까 가능)

 

다음에 적용해 볼 것

  • 6/5까지 개념부분 복습하고 계속해서 문제풀자!