SELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE
FROM (

    SELECT *
    FROM FOOD_PRODUCT
    ORDER BY PRICE DESC
 
)
WHERE ROWNUM <= 1
;

 

주의!

 

-- 코드를 입력하세요
SELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE
FROM FOOD_PRODUCT
WHERE MAX(PRICE) IN PRICE  
;

 

이건 안된다. 마지막 줄에 저렇게 사용할 수가 없단다.

 

"MAX(PRICE) IN PRICE"는 SQL 구문에서 사용할 수 없습니다. IN 연산자는 왼쪽에 있는 값을 오른쪽의 값 중 하나와 비교합니다. 그러나 MAX(PRICE)는 집계 함수이므로 왼쪽에 있는 값을 집계하지 않습니다.

가장 높은 가격을 가진 상품을 필터링하고 싶다면, 서브쿼리나 조인을 사용하여야 합니다. 다음은 가장 높은 가격을 가진 상품의 정보를 가져오는 쿼리입니다.

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

아니면 

 

SELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE
FROM FOOD_PRODUCT

WHERE (SELECT MAX(PRICE) FROM FOOD_PRODUCT) IN PRICE;

 

 


SELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE
FROM (

    SELECT *
    FROM FOOD_PRODUCT
    ORDER BY PRICE DESC
 
)
WHERE ROWNUM <= 1
;

 

주의!

 

-- 코드를 입력하세요
SELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE
FROM FOOD_PRODUCT
WHERE MAX(PRICE) IN PRICE  
;

 

이건 안된다. 마지막 줄에 저렇게 사용할 수가 없단다.

 

"MAX(PRICE) IN PRICE"는 SQL 구문에서 사용할 수 없습니다. IN 연산자는 왼쪽에 있는 값을 오른쪽의 값 중 하나와 비교합니다. 그러나 MAX(PRICE)는 집계 함수이므로 왼쪽에 있는 값을 집계하지 않습니다.

가장 높은 가격을 가진 상품을 필터링하고 싶다면, 서브쿼리나 조인을 사용하여야 합니다. 다음은 가장 높은 가격을 가진 상품의 정보를 가져오는 쿼리입니다.

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

아니면 

 

SELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE
FROM FOOD_PRODUCT

WHERE (SELECT MAX(PRICE) FROM FOOD_PRODUCT) IN PRICE;

 

 

WITH A AS(
SELECT


TO_CHAR(DATETIME, 'HH24') AS HOUR,
COUNT(ANIMAL_ID) AS COUNT


FROM ANIMAL_OUTS 


GROUP BY TO_CHAR(DATETIME, 'HH24')


ORDER BY HOUR ASC)


SELECT 


    CASE 
        WHEN HOUR = '09' THEN '9' 
        ELSE HOUR 
    END AS HOUR,
    COUNT  


FROM A


WHERE HOUR >= 9 
;




<포인트 정리>

 

1. DATE 형에서 시간만 가져오기

 

SELECT TO_CHAR(DATE 열 , 'HH24:MI:SS') 

 

이때! DATE형으로 10시 아래 시각들은 09,08 이런식으로 0이 붙는다.

이때, TO_NUMBER로 숫자형으로 바꿔준다면, DATE형은 아니지만 숫자형으로 변하고 앞에 0이 없어진다.

 

2. 특정 행의 숫자 바꾸기

 

CASE문 사용.

 

SELECT 

   CASE 

      WHEN HOUR = '09' THEN '9'

      ELSE HOUR

   END AS HOUR

 

이런식으로 

 

<아래는 다른 분이 작성하신 코드. 위에 쓴 코드는 내껀데 틀렸다고 나온다.

아래는 맞고. 뭔 차인지 모르겠다. 아스키 코드 문제인가>

 

WITH A AS(
SELECT
TO_CHAR(DATETIME, 'HH24') AS HOUR,
COUNT(ANIMAL_ID) AS COUNT
FROM ANIMAL_OUTS 
GROUP BY TO_CHAR(DATETIME, 'HH24')
ORDER BY HOUR ASC)

SELECT TO_NUMBER(HOUR) AS HOUR, COUNT  
FROM A
WHERE HOUR >= 9 
;

 

3. 데이터 형

 

숫자형

날짜형

문자형

T/F

NULL 등등

 

여기서 숫자형, 날짜형, 문자형 이거 구분 주의하자.

숫자형은 말 그대로 숫자고

문자형은 말 그대로 문자형이다.

 

문자형 9와 숫자형 9는 다른 듯 하다.(체크)

 

4. 따옴표 주의

 

문자열에 따옴표를 사용할 때는 기본적으로 '~'이다.

이때, 숫자가 맨 앞에 올 때만 "~"인 듯 하다. (체크)

+ Recent posts