기타/Python

250609_파이썬(정수→문자열→리스트)

baektree 2025. 6. 9. 20:51

요약/나만의 인사이트

  • WHERE 절은 특정한 값을 필터링 하는 조건절이다. 이때 명확한 값과의 산술 및 논리연산이 가능하다. 따라서 서브쿼리가 있더라도 명확한 값이 산출된 서브쿼리(SELECT) 활용해야 한다. ≥ = < IN AND LIKE %
  • join은 문자열 매서드 중 하나이다. 리스트 같은 여러 문자열을 하나의 문자열로 합칠 때 사용한다.
"구분자".join(리스트)

my_list = ["사과", "딸기", "참외", "메론"]

## "/"로 구분해서 붙이기
result = "/".join(my_list)
print(result) #사과/딸기/참외/메론

## 아무것도 없이 붙이기
result = "".join(my_list)
print(result) #사과딸기참외메론

## 문자열은 왜 조인이 되는거죠?
## 문자열도 각각 순서있는 요소로 구성되었기 때문에 조인할 수 있다.
s = "abc"
result = ",".join(s)
print(result) #a,b,c

새롭게 알게 된 것

  • 파이썬 각 자릿수의 합을 구하기
    • 문자열 → 리스트로 바꾸면 각 요소가 리스트에 포함된다.
      • 문자열을 왜 리스트로 바꿀 수 있죠? 문자열도 문자 하나하나를 포함한 순서 있는 시퀀스이기 때문
    • 리스트 : 여러 값을 하나의 변수에 저장한 시퀀스 자료형
    n = 123
    str(n)   #'123'
    list(str(n))  #['1', '2', '3'] 문자열도 문자 하나하나를 포함한 순서 있는 시퀀스이기 때문
    
    # 정수의 각 자릿수 합을 구하기
    n = 123
    
    def solution(n):
    	total = 0
    	my_list = list(str(n)) # n = '123'   # my_list = ['1', '2', '3']
    	for i in my_list:
    		total += int(i) # 각 요소는 문자니까 정수형으로 자료 변환해줘야 함.
    	return total  #6	
    

특히 어려웠던 것

  • SQL 코드카타 70번
    • 문제
      • MEMBER_PROFILE와 REST_REVIEW 테이블에서 리뷰를 가장 많이 작성한 회원의 리뷰들을 조회하는 SQL문을 작성해주세요. 회원 이름, 리뷰 텍스트, 리뷰 작성일이 출력되도록 작성해주시고, 결과는 리뷰 작성일을 기준으로 오름차순, 리뷰 작성일이 같다면 리뷰 텍스트를 기준으로 오름차순 정렬해주세요.
    • 틀렸던 이유
      • WHERE 절은 서브쿼리의 명확한 결과값을 보고 연산한다는 사실을 간과!
      • CTE를 테이블로 활용할 시 별칭을 부여하지 않음.
    • 문제 설계
      1. rest_review에서 리뷰를 가장 많이 작성한 회원 아이디 조회 : group by, count(member_id), rank() over(order by count(member_id)
      2. rest_profile에서 이름만 출력: WHERE 절에 서브쿼리로 활용 WHERE, IN, SUB
      3. 위를 CTE로 만들기, A라 명명
      4. A와 REST_REVIEW 테이블을 JOIN하여 이름, 리뷰, 날짜 조회
    • 풀이
    # 리뷰작성자 랭킹 1위인 아이디만 출력 -> A
    WITH A AS
    (
    SELECT member_id,
    			 RANK() OVER (ORDER BY COUNT(member_id) DESC) AS rnk
    FROM rest_review
    GROUP BY member_id
    ) ,
    
    # 1위 아이디를 활용하여 이름 출력 -> B
    		B AS 
    (
    SELECT member_id,
    			member_name
    FROM member_profile
    WHERE member_id IN ( SELECT member_id 
    									 FROM A
    									 WHERE rnk = 1 )
    )
    
    # 이름, 텍스트, 날짜 출력 
    SELECT B.member_name,
    			R.review_text,
    			DATE_FORMAT(R.review_date, '%Y-%m-%d') AS review_date
    FROM rest_review R join B
    		 ON R.member_id = B.member_id
    ORDER BY 3 ASC, 2 ASC
    
    
    • 새롭게 알게 된 점
      • WITH절(CTE)는 메인쿼리에서 임시테이블처럼 사용할 수 있다. 다만 WHERE 절에서 IN 연산자와 비교할 때는 비교하자고 하는 값을 SELECT 해야 한다.
      • CTE는 WITH절로 선언되며 하나의 테이블처럼 메인쿼리의 FROM , JOIN, IN(SELECT ~~) 등의 자리에만 사용된다.
        • FROM A
        • JOIN A ON
        • WHERE id in (SELECT id FROM A)
      • 테이블로 쓰일 때는 별칭이 반드시 있어야 한다. (결과물을 참조하기 위한 SQL 문법이다.)

다음에 적용해 볼 것

  • CTE를 만들어 놓고 별칭을 명명, FROM절이나 JOIN절에 활용하기