WHERE, LIKE절의 특징 중 하나

HONG LEE ·2024년 4월 18일
0

오늘도 SQL코딩 문제를 풀다가 알게된 점을 소개하고자 한다.
오늘의 문제는 아래와 같았다.

나는 처음에 쿼리를 아래와 같이 작성하였다.

SELECT PRODUCT_ID,
       PRODUCT_NAME,
       PRODUCT_CD,
       CATEGORY,
       PRICE
FROM FOOD_PRODUCT
WHERE PRICE = MAX(PRICE)

하지만 계속 오류가 떴다.. WHERE 조건절에 MAX(PRICE)를 넣으면 풀려야 하는거 아니야? 생각했다. 근데 알아보니..
WHERE절에 직접 집계함수 OR 윈도우함수의 결과를 사용해선 안된다고 한다...
대신 아래와 같이 서브쿼리를 활용하여 해결 가능했다.

-- 
SELECT PRODUCT_ID,
       PRODUCT_NAME,
       PRODUCT_CD,
       CATEGORY,
       PRICE
FROM FOOD_PRODUCT
WHERE PRICE = (SELECT MAX(PRICE) FROM FOOD_PRODUCT)

또 다른 문제를 풀다가 알게된 사실이 있다!! 아래의 문제를 봐보자.

여기서 딱 생각이 들었던게 서브쿼리랑 IF문, LIKE문을 써야겠다 싶었다. 그래서 아래와 같이 쿼리를 작성했다.

-- 코드를 입력하세요
SELECT ANIMAL_ID,
       NAME,
       IF(중성화여부='중성화','O','X') "중성화"
FROM
(
SELECT ANIMAL_ID,
       NAME,
       IF ((SEX_UPON_INTAKE like 'Neutered%' OR 'Spayed%'),'중성화','정상') '중성화여부'
from ANIMAL_INS
)a
ORDER BY 1

하지만 계속 오류가 났다ㅜㅜ 이유를 알고보니 LIKE문 안에는 OR가 들어갈 수 없단다!!
그래서 구지구지 IF문을 아래와 같이 길게 써야했다..

IF((SEX_UPON_INTAKE LIKE 'Neutered%') OR (SEX_UPON_INTAKE LIKE 'Spayed%'),'중성화','정상') '중성화여부'

이렇게 쓰니 해결이 되었다..
아직 모르는게 투성이다ㅜ 문제를 많이 풀면 풀수록 이런 것들을 알게되는 것같다.
꾸준히 많이 풀어봐야겠다!

0개의 댓글