Today I Learned 1.
<SQL>
TRUNCATE(숫자, 자릿수)
https://school.programmers.co.kr/learn/courses/30/lessons/131530
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
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
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
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 |