DataBase(103)
-
[프로그래머스] 자동차 대여 기록 별 대여 금액 구하기_Oracle
mysql과 oracle의 풀이방법에 차이가 거의 없기 때문에 자세한 풀이 방법은 https://tldnjs0821.tistory.com/203 [프로그래머스] 자동차 대여 기록 별 대여 금액 구하기_MySQL 많이 어려운 문제였다. 3개의 테이블을 모두 한번에 조인해서 풀려고 시도했는데 대여 기간이 7일 미만인 대여 기록을 처리할 수가 없어서 엄청 고민했다. 그러다 with절이라는 엄청난 놈을 알게 tldnjs0821.tistory.com 위 url을 참고하기 바란다. 이 문제에서 mysql의 정답과 oracle의 정답의 차이점은 IFNULL함수와 역시나 date타입의 연산이 있다. mysql에는 IFNULL함수가 있고 oracle에는 NVL함수가 있다. 두 함수 모두 인자로 컬럼명과 값을 하나 받으면..
2023.04.18 -
[프로그래머스] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기_Oracle
정답을 도출하는 로직은 mysql과 크게 다를 것이 없다. 이 문제를 mysql로 푼 것은 https://tldnjs0821.tistory.com/201 [프로그래머스] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기_MySQL 레벨4 문제라 그런지 확실히 어려웠다. 내가 가장 애를 먹었던 부분은 11월에 대여가 가능한 차를 구하는 방법이었다. 처음엔 START_DATE와 END_DATE 사이에 11월이 없는 레코드를 뽑으려했다. 그런데 1 tldnjs0821.tistory.com 위 url에 있으니 참고하기를 바란다. 이 글에서는 mysql과 oracle의 차이를 말해보고자 한다. 우선 이 문제에서는 date타입을 표현하는 것에 차이가 있다. mysql에서는 date타입도 string타입과 호환이..
2023.04.17 -
[프로그래머스] 있었는데요 없었습니다_Oracle, MySQL
그래도 조인하는 문제 중에 쉬운 편인 것 같다. id가 같은 것끼리 조인해서 INS의 DATETIME이 더 큰 레코드를 찾아내면 된다. Oracle, MySQL에서 모두 정답 SELECT B.ANIMAL_ID, B.NAME FROM ANIMAL_INS A RIGHT JOIN ANIMAL_OUTS B ON A.ANIMAL_ID=B.ANIMAL_ID WHERE A.DATETIME > B.DATETIME ORDER BY A.DATETIME;
2023.04.15 -
[프로그래머스] 오랜 기간 보호한 동물(1)_MySQL
우선 ANIMAL_INS와 ANIMAL_OUTS를 left join하여 ANIMAL_OUTS의 ANIMAL_ID를 체크하면 아직 입양되지 않은 동물들을 구할 수 있다. 이 동물들을 ANIMAL_INS.DATETIME으로 정렬하면 입양되지 않는 동물들을 오래동안 보호한 순으로 정렬하게 된다. 이들중 상위 3개 레코드만 뽑으면 정답이다. 정답 SELECT * FROM( SELECT A.NAME, A.DATETIME FROM ANIMAL_INS A LEFT JOIN ANIMAL_OUTS B ON A.ANIMAL_ID=B.ANIMAL_ID WHERE B.ANIMAL_ID IS NULL ORDER BY A.DATETIME ) DATA LIMIT 3
2023.04.14 -
[프로그래머스] 오랜 기간 보호한 동물(2)_MySQL
입양보낸 동물 중 입양일이 있는 동물들을 입양일을 기준으로 내림차순으로 정렬하고, 그들중 상위 2개 레코드만 뽑으면 된다. 정답 WITH DATA AS ( SELECT B.ANIMAL_ID, B.NAME FROM ANIMAL_INS A RIGHT JOIN ANIMAL_OUTS B ON A.ANIMAL_ID=B.ANIMAL_ID WHERE A.DATETIME IS NOT NULL ORDER BY B.DATETIME-A.DATETIME DESC ) SELECT * FROM DATA LIMIT 2
2023.04.13 -
[프로그래머스] 조건별로 분류하여 주문상태 출력하기_Oracle
그냥 OUT_DATE에 따를 출고여부만 정하면 되는 쉬운 문제다. CASE WHEN문을 이용해서 OUT_DATE에 따라 출고여부를 정해주었다. 정답 SELECT ORDER_ID, PRODUCT_ID, TO_CHAR(OUT_DATE, 'YYYY-mm-dd') OUT_DATE, ( CASE WHEN OUT_DATE IS NULL THEN '출고미정' WHEN OUT_DATE
2023.04.11