TIL - 250430_(SQL_datalemur_2개)

오정수·2025년 4월 30일

TIL

목록 보기
65/78

문제1(링크)

SELECT
  DISTINCT department_id
  , TO_CHAR(payment_date,'MM-YYYY') AS payment_date
  , CASE
  WHEN AVG(amount) OVER () < AVG(amount) OVER (PARTITION BY department_id) THEN 'higher'
  WHEN AVG(amount) OVER () > AVG(amount) OVER (PARTITION BY department_id) THEN 'lower'
  ELSE 'same' END AS comparison
FROM employee
LEFT JOIN salary 
USING(employee_id)
WHERE EXTRACT(MONTH FROM payment_date) = 3
AND EXTRACT(YEAR FROM payment_date) = 2024

문제2(링크)

SELECT
  COUNT(*)
FROM transactions a 
JOIN transactions b 
ON a.transaction_timestamp > b.transaction_timestamp
AND a.merchant_id = b.merchant_id
AND a.credit_card_id = b.credit_card_id
AND a.amount = b.amount
AND a.transaction_timestamp - b.transaction_timestamp <= INTERVAL '10 MINUTES'

비고 : 마지막 조건에 나는 EXTRACT(MINUTE FROM ~)를 사용했었다. 정답이 아니어서 고민을 하다 깨달았다. 나처럼 코드를 쓰면 65분 차이도 5분으로 추출하여 오류가 발생한다는 것..!
65분은 1시간 5분인데 분만 추출하니 5만 나오는 것이다. 그래서 두 가지 방법을 고안했다.
첫번째는 위에 코드처럼 INTERVAL를 사용하는 것이다.
두번째는 EXTRACT에서 EPOCH를 사용하는 거다. EPOCH는 초로 변환하는 것으로 600으로 조건을 주면 된다.

profile
안녕하세요 오정수입니다

0개의 댓글