ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 코드카타
    [스파르타코딩클럽]데이터분석 과정/TIL,WIL 2024. 2. 20. 08:39

    SQL 코드카타

    있었는데요 없었습니다
    관리자의 실수로 일부 동물의 입양일이 잘못 입력
    보호 시작일보다 입양일이 더 빠른 동물의 아이디와 이름을 조회하는 SQL문을 작성
    보호 시작일이 빠른 순으로 조회
    • 입양일, 보호시작일 : 조인
    • 보호 시작일이 빠름 : <
    • 정렬 : order by
    SELECT I.ANIMAL_ID, I.NAME FROM ANIMAL_INS AS I
    INNER JOIN ANIMAL_OUTS AS O ON I.ANIMAL_ID = O.ANIMAL_ID
    WHERE O.DATETIME < I.DATETIME
    ORDER BY I.DATETIME ASC;

     

    Product Price at a Given Date
    2019년 8월 16일의 모든 제품 가격을 찾기 위한 해결책으로, 모든 제품의 가격이 변경되기 전 초기 가격을 10으로 가정
    • 초기 가격, 지금 가격 : 서브쿼리
    • 20190816 이후에 변경 : 초기가격 = min
    • 연산자 결합 : union all
    SELECT product_id, 10 AS price
    FROM Products
    GROUP BY product_id
    HAVING MIN(change_date) > '2019-08-16'
    UNION ALL
    SELECT P.product_id, P.new_price as price
    FROM Products P INNER JOIN 
    (
      SELECT product_id, MAX(change_date) as max_date
      FROM Products
      WHERE change_date <= '2019-08-16'
      GROUP BY product_id
    ) as R 
    ON P.product_id = R.product_id AND P.change_date = R.max_date;

     

    UNION 이란
    여러 쿼리문들을 합쳐서 하나의 쿼리문으로 만들어주는 방법
    중복된 값을 제거하고 보여줌
    중복된 값을 제거하는 연산이 추가로 수행되기 때문에 UNION ALL보다 속도가 느림

    UNION ALL 이란
    UNION과 동일하게 여러 쿼리문들을 합쳐서 하나의 쿼리문으로 만들어주는 방법
    중복된 값을 모두 보여줌


    JOIN과 차이점

    JOIN : 새로운 열로 결합한다. (수평결합)
    UNION : 새로운 행으로 결합한다. (수직결합)

     

    Weather Observation Station 14
    STATION 테이블에서 1372345보다 작은 LAT_N (북위)의 가장 큰 값울 소수점 4자리까
    • 가장 큰 값 : max
    • ~보다 작은 : <
    SELECT ROUND(MAX(LAT_N), 4)
    FROM STATION
    WHERE LAT_N < 137.2345

     


    파이썬 코드카타

    대충 만든 자판
    1번 키부터 차례대로 할당된 문자들이 순서대로 담긴 문자열배열 keymap
    입력하려는 문자열들이 담긴 문자열 배열 targets 
    각 문자열을 작성하기 위해 키를 최소 몇 번씩 눌러야 하는지 순서대로 배열에 담아 return 하는solution 함수
    단, 목표 문자열을 작성할 수 없을 때는 -1을 저장합니다.
    • for문 사용
    • for~else문 사용
    • if~else문 사용
    def solution(keymap, targets):
        answer = []
        for target in targets:
            minkey = 0 # target 총 횟수
            
            for i in target: # target 문자열 하나
                c = 101 # 100번까지 가능
                a = False # 존재여부
                for k in keymap:
                    key = k.find(i)
                    if key == -1: # 존재하지 않으면 계속
                        continue
                    c = min(key+1, c) 
                    a = True 
                    
                if a: # 누적
                    minkey += c
                else: # answer에 -1 추가
                    answer.append(-1)
                    break
            else: # for-else
                answer.append(minkey) 
                
        return answer

     

Designed by Tistory.