본문 바로가기
T.I.L. :: Today I Learned/항해99 14기 온보딩

3월 23일 Day18.

by DaSsom 2023. 3. 23.
Today I Learned 1.

<SQL>

TRUNCATE(숫자, 자릿수)

https://school.programmers.co.kr/learn/courses/30/lessons/131530

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

   SELECT TRUNCATE(price, -4) AS price_group, COUNT(*) AS products
     FROM product
 GROUP BY price_group
 ORDER BY price_group

 

기존에 알고있던 문법은 TRUNC(수[, 자릿수]) 였는데 이건 오라클 함수였음

mysql 에서는 TRUNCATE(수, 자릿수) 로 사용함


HAVING

https://school.programmers.co.kr/learn/courses/30/lessons/131536

 

코딩테스트 연습 - 재구매가 일어난 상품과 회원 리스트 구하기

다음은 어느 의류 쇼핑몰의 온라인 상품 판매 정보를 담은 ONLINE_SALE 테이블 입니다. ONLINE_SALE 테이블은 아래와 같은 구조로 되어있으며 ONLINE_SALE_ID, USER_ID, PRODUCT_ID, SALES_AMOUNT, SALES_DATE는 각각 온

school.programmers.co.kr

  SELECT user_id, product_id FROM online_sale
GROUP BY user_id, product_id
  HAVING count(*) > 1
ORDER BY user_id, product_id DESC

문제가 이해가 안되서 헷갈렸던 문제 ㅋㅋ 코드를 보니 문제가 이해가 되는 아이러니

 

 

GROUP BY - HAVING / DATEDIFF

https://school.programmers.co.kr/learn/courses/30/lessons/157342

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

  SELECT CAR_ID, 
         ROUND(AVG(DATEDIFF(END_DATE, START_DATE)+1),1) 
         AS AVERAGE_DURATION 
    FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
  HAVING AVG(DATEDIFF(END_DATE, START_DATE)+1) >= 7
ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC

1. 날짜 차이를 구할 때 1을 더해줘야함

2. where 를 사용하여 바로 조건을 설정해주었는데 틀림

3. group by로 먼저 그룹핑 해주고 그 안에서 조건을 설정해주어야하는 문제..!

 

어렵다ㅠㅠ

 

DATEDIFF / TIMEDIFF

https://school.programmers.co.kr/learn/courses/30/lessons/59043

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

DATEDIFF 를 사용해도 결과값이 같은데 왜 때문에 안되는가..? 해서 봤더니 나와 같은 사람 발견!

DATEDIFF 는 날짜의 차이만 계산해 줄 뿐, 시간의 차이까지는 계산하지 않음

문제에는 datetime 값이 시간까지 들어가 있기 때문에 DATEDIFF() <= 0 조건을 달아주면 같은 날의 시간의 차이까지는 계산을 못한다!!

그래서 이 경우에 TIMEDIFF 를 써주어야 해결! 대박쓰..

    SELECT ins.animal_id, ins.name 
      FROM animal_ins AS ins
INNER JOIN animal_outs AS outs
        ON ins.animal_id = outs.animal_id
     WHERE timediff(outs.datetime, ins.datetime) < 0
  ORDER BY ins.datetime;

'T.I.L. :: Today I Learned > 항해99 14기 온보딩' 카테고리의 다른 글

3월 24일 Day19.  (0) 2023.03.24
3월 22일 Day17.  (0) 2023.03.22
3월 21일 Day16.  (0) 2023.03.21
3월 20일 Day15.  (0) 2023.03.20
3월 18일 Day13.  (0) 2023.03.18