CodeKata

SQL

71번 다시 풀고 팀 활동

  • 작성한 쿼리
WITH total_march AS (
  SELECT
    sales_date
    , product_id
    , user_id
    , sales_amount
  FROM
    online_sale
  WHERE
    DATE_FORMAT(sales_date,'%Y%m') = 202203
  UNION ALL
  SELECT
    sales_date
    , product_id
    , NULL AS user_id
    , sales_amount
  FROM
    offline_sale
  WHERE
    DATE_FORMAT(sales_date, '%Y%m') = 202203
)
SELECT
  DATE_FORMAT(sales_date, '%Y-%m-%d') AS sales_date
  , product_id
  , user_id
  , sales_amount
FROM
  total_march
ORDER BY
  sales_date
  , product_id
  , user_id
;

→ 전에 푼 거랑 비교했을 때 WHERE절 DATE_FORMAT 쓰는 것, ORDER BY절 적는 것만 달라졌음

93. Project Employees Ⅰ

  • 작성한 쿼리
WITH project_employee AS (
  SELECT
    project_id
    , COUNT(*) AS cnt
    , SUM(experience_years) AS total_exp
  FROM
    project p
    LEFT JOIN employee e
    USING(employee_id)
  GROUP BY
    project_id
)
SELECT
  project_id
  , ROUND(total_exp / cnt, 2) AS average_years
FROM
  project_employee
;

→ 이렇게 적고 나니 그냥 AVG 써도 되겠다는 생각이 떠오름

SELECT
  p.project_id
  , ROUND(AVG(e.experience_years),2) AS average_years
FROM 
  Project AS p 
  LEFT JOIN  Employee AS e
  USING(employee_id)
GROUP BY 
  p.project_id
;

참고할 만한 다른 풀이

select p.project_id, ROUND(AVG(e.experience_years),2) as average_years
from employee e inner join project p on p.employee_id=e.employee_id
group by p.project_id

→ employee 테이블에 있는 experience_years만 더할 것이기 때문에 INNER JOIN으로도 충분하다고 함

Python

문자열 내림차순으로 배치하기

  • 작성한 코드
def solution(s):
    answer = ''
    return answer.join(sorted(s, reverse=True))

→ 입출력 예

sreturn
"Zbcdefg""gfedcbZ"

문자열도 대소비교가 가능하니까 뭔가 컴퓨터가 알파벳 순서대로 숫자를 지정해 둔 게 아닐까 하는 생각이 들었음
입출력 예에 나온 알파벳 가지고 ord(Z)와 ord(g)를 해봤는데 각각 90, 103이 나왔음
ord(A)는 65인 걸 보니 대문자 A가 가장 작은 숫자 → 소문자 z가 가장 큰 숫자인 것 같아서 이걸 이용하면 뭔가 풀리지 않을까 생각했음

문자열도 sort를 할 수 있나 찾아봤는데 sorted 함수가 있어서 이걸

SDL(Self-directed Learning)

  • is 연산자는 객체의 고유한 id 번호를 확인
    • id 함수를 통해 객체를 고유한 번호를 확인할 수 있음
    >>> id(1234567)
    4391252976
    • 이 고유한 번호는 우리가 사용하는 파이썬에서(cpython)는 메모리주소에 해당
      • 객체가 생성되면 메모리에 저장됨 → 저장된 메모리 주소가 바로 고유 번호
      • 동일한 객체라면 같은 메모리 주소값을 가짐 &
        같은 메모리주소값을 가진다면, 동일한 객체임
    • is 연산자는 id번호를 비교함으로 동일한 객체인지 확인
      • 1과 1.0의 경우 타입은 다르지만, 같은 숫자를 의미하므로 1 == 1.0의 결과값은 True
      • 1 is 1.0 1과 1.0은 같은 숫자를 의미하지만, 타입도 다르고 다른 객체이기 때문에 is 연산을 통해 비교한 결과값은 False

팀 프로젝트

프로젝트 진행을 위한 공부
오늘 작업한 거

회고

  • 너무... 어렵다... 😭😭😭😭😭
profile
2 B R 0 2 B

0개의 댓글

Powered by GraphCDN, the GraphQL CDN