크게 어려움 없이 WHERE 써서 Inner join으로 풀었던 문제이다.

SELECT I.ANIMAL_ID, I.ANIMAL_TYPE, I.NAME FROM ANIMAL_INS I, ANIMAL_OUTS O
 WHERE I.ANIMAL_ID = O.ANIMAL_ID AND I.SEX_UPON_INTAKE LIKE '%Intact%' AND 
 (O.SEX_UPON_OUTCOME LIKE '%Spayed%' OR O.SEX_UPON_OUTCOME LIKE '%Neutered%')
 ORDER BY I.ANIMAL_ID;

CASE 로 조건에 따라 값을 넣고 출력하는 문제이다.

다만 조건이 DATE의 대소비교이므로 TO_CHAR을 이용해야 한다.

SELECT ORDER_ID, PRODUCT_ID, TO_CHAR(OUT_DATE, 'YYYY-MM-DD'), 
    CASE WHEN OUT_DATE IS NULL THEN '출고미정'
         WHEN TO_CHAR(OUT_DATE, 'YYYY-MM-DD') <= '2022-05-01' THEN '출고완료'
         WHEN TO_CHAR(OUT_DATE, 'YYYY-MM-DD') > '2022-05-01' THEN '출고대기'
    END AS 출고여부
 FROM FOOD_ORDER ORDER BY ORDER_ID ASC;

GROUP BY를 이용하여 TYPE 별로 묶은후 MAX값을 찾아내 조건에 맞게 조회하는 문제이다.

익숙한 문제여서 어렵지 않게 풀었다.

SELECT R.FOOD_TYPE, R.REST_ID, R.REST_NAME, R.FAVORITES
    FROM REST_INFO R, (SELECT FOOD_TYPE, MAX(FAVORITES) B FROM REST_INFO
          GROUP BY FOOD_TYPE) T
    WHERE R.FAVORITES = B AND R.FOOD_TYPE = T.FOOD_TYPE
    ORDER BY R.FOOD_TYPE DESC;

앞의 문제와 마찬가지로 INNER JOIN과 DATETIME의 차이를 구하는 문제였다.

크게 어려움은 없었으며 FULL OUTER JOIN으로 한번 풀어 보았다.

SELECT I.ANIMAL_ID, I.NAME 
 FROM ANIMAL_INS I FULL OUTER JOIN ANIMAL_OUTS O ON(I.ANIMAL_ID = O.ANIMAL_ID)
 WHERE O.DATETIME - I.DATETIME < 0
 ORDER BY I.DATETIME ASC;

GROUP BY 해서 COUNT를 조건으로 조회하는 문제이다.

WHERE 에서 COUNT()가 안먹혀서 조금 시간이 걸렸다.

SELECT P.ID, P.NAME, P.HOST_ID 
 FROM PLACES P, (SELECT HOST_ID, COUNT(HOST_ID) AS C FROM PLACES 
 GROUP BY HOST_ID) T
 WHERE C >= 2 AND T.HOST_ID = P.HOST_ID ORDER BY P.ID;

+ Recent posts