25일차

Suhyeon Lee·2024년 11월 5일
0

CodeKata

SQL

66번 다시 풀고 팀 활동

WITH views_king AS (
  SELECT
    RANK() OVER (ORDER BY views DESC) AS ranking
    , board_id
  FROM
    used_goods_board
)
, rank_one_boardId AS (
  SELECT
    b.board_id
  FROM
    used_goods_board b
    JOIN views_king k
    USING(board_id)
  WHERE
    ranking = 1
)
SELECT
  CONCAT('/home/grep/src/',f.board_id,'/',file_id,file_name,file_ext) AS file_path
FROM
  used_goods_file f
  JOIN rank_one_boardId r
  USING(board_id)
ORDER BY
  f.file_id DESC
;

→ 처음 풀었을 때는 ORDER BY DESCLIMIT로 풀었음!

  • MAX(views)로도 됩니다!

92. Average Selling Price

  • 작성한 쿼리
WITH product_units_price AS (
  SELECT
    p.product_id
    , price
    , units
  FROM
    prices p
    LEFT JOIN unitssold u
    ON p.product_id = u.product_id
    AND purchase_date BETWEEN start_date AND end_date
)
, total_price AS(
  SELECT
    product_id
    , IFNULL(units, 0) AS units
    , IFNULL(units, 0) * price AS total
  FROM
    product_units_price
)
SELECT
  product_id
  , IFNULL(ROUND(sum(total)/sum(units), 2), 0) AS average_price
FROM
  total_price
GROUP BY
  product_id
;

참고할 만한 풀이

SELECT 
  p.product_id
  , IFNULL(ROUND(SUM(units*price)/SUM(units),2),0) AS average_price
FROM
  Prices p 
  LEFT JOIN UnitsSold u
  ON p.product_id = u.product_id 
  AND u.purchase_date BETWEEN start_date AND end_date
group by
  product_id

→ 내가 작성한 쿼리가 사실은 이렇게 한 번에 적을 수 있는 거였는데 괜히 CTE를 썼다.

python

33. 약수의 개수와 덧셈

  • 작성한 코드
def solution(left, right):
    answer = 0
    for i in range(left, right+1):
        div_list=[]
        for j in range(1, int(i**(1/2))+1):
            if (i % j == 0):
                div_list.append(j)
                if ((j**2) != i):
                    div_list.append(i//j)
        if len(div_list) % 2 == 0:
            answer += i
        else:
            answer -= i
    return answer

→ N = A*B로 나타낼 수 있으니까 절반만 돌려서 A만 찾고 짝궁은 N/A로 넣는다는 전략
→ 애초에 N = A*B에서 A=B인 경우와 아닌 경우로 나눌 수 있으면 금방 풀 것 같은데 이걸 코드로 나타내는 방법을 모르겠음

참고하면 좋은 다른 풀이

  • 내가 생각하던 풀이법으로 코드 작성해주신 분이 계셨음
def solution(left, right):
    answer = 0
    for i in range(left,right+1):
        if int(i**(1/2))==i**(1/2):
            answer -= i
        else:
            answer += i
    return answer

SDL

팀 과제 관련 공부
오늘 작업한 내용

회고

  • 읽어보면 좋을 블로그 발견: Data Science Magazine
  • 파이썬 실력이 부족하니까 포크레인으로 팔 땅을 모종삽으로 파는 느낌
    • 함수와 라이브러리가 엄청 많은데 왜 쓰지를 못하니…
profile
2 B R 0 2 B

0개의 댓글

관련 채용 정보