퀘스트

3) 상품 주문이 들어왔으니 주문을 처리해봅시다!

수현조 2024. 11. 14. 22:58

1. orders 테이블에서 주문 수량(amount)이 2개 이상인 주문을 진행한 소비자의 ID(customer_id)만 선택하는 쿼리를 작성해주세요!

 

 

[내가 쓴 답]

SELECT  customer_id

FROM orders

WHERE amount >= 2

 

 

 

[챗GPT의 답안] 

 

SELECT DISTINCT customer_id

FROM orders

WHERE amount >= 2

 

 

결과는 같았지만, GPT가 DISTINCT를 사용한 이유가 궁금해서 물어보았다.

 


SELECT 다음에 **DISTINCT**를 사용하는 이유는,
특정 열에서 중복된 값을 제거하고 유일한 값들만 가져오기 위해서입니다. 이 방법은 중복을 없애야 하는 경우에 매우 유용하며,
특히 같은 고객이 여러 번 주문을 했을 때 고객 ID가 중복되는 것을 방지하는 데 사용됩니다.

DISTINCT를 사용하는 몇 가지 경우와 떠올리는 방법은 다음과 같습니다:

1. 중복을 없애고 고유한 값만 가져와야 하는 경우
 - 예를 들어, 특정 고객이 여러 번 주문했을 때, 고객 ID만 고유하게 가져오려면 DISTINCT가 필요합니다.
 - 즉, **“특정 조건에 맞는 유일한 값을 가져와야 한다”**는 요구사항이 있을 때, DISTINCT가 떠오릅니다.

2. 데이터베이스 쿼리의 목적을 생각할 때
 - ID만 가져오는 쿼리라면, 대개 중복을 제거한 고유한 목록이 필요할 때가 많습니다.
   이럴 때, DISTINCT를 사용하면 유용합니다.
 - 예를 들어, “특정 조건을 만족하는 고객 ID만 가져온다”라는 요구사항이 있을 때,
    고객이 여러 주문을 하더라도 고객 ID가 중복되지 않도록 해야 한다는 점에서 DISTINCT가 필요할 수 있습니다.

3. 데이터 중복이 예상되는 상황을 떠올리기
 - 같은 고객이 여러 번 주문하거나, 동일한 값이 여러 번 입력된 경우 중복을 제거해야 하므로,
    DISTINCT를 활용하는 경우가 많습니다.
 - 데이터를 조회할 때 **"고유한 값"**만 필요하다면, DISTINCT를 떠올리기 좋습니다.

2. orders 테이블에서 2023년 11월 2일 이후에 주문된 주문 수량(amount)이 2개 이상인 주문을 선택하는 쿼리를 작성해주세요!


[내가 쓴 답]

SELECT DISTINCT id

FROM orders

WHERE order_date >=2023-11-02 AND amount >=2

 

결과는 틀렸다. id 1,4가 결과로 나왔는데  둘은 해당하지 않았다..ㅋㅋ

GPT가 알려준 오류

아래와 같은 몇 가지 오류가 있습니다:

1. 날짜 형식: 2023-11-02는 문자열 형식이어야 하므로 따옴표(' ')로 감싸야 합니다.
2. 비교 연산자: 날짜 비교에서 >= 연산자는 괜찮지만, 날짜 값이 문자열로 처리되어야 합니다.

 

[챗GPT의 답안] 

SELECT *

FROM orders

WHERE order_date > '2023-11-02'

AND amount >= 2

설명
- order_date > '2023-11-02': order_date가 2023년 11월 2일 이후인 주문만 선택합니다.
- amount >= 2: 주문 수량이 2개 이상인 주문만 필터링합니다.SELECT *: orders 테이블의 모든 열을 선택합니다.
   필요에 따라 특정 열만 선택할 수도 있습니다.

날짜를 작은 따옴표로 감싸니까 간단히 해결...

 

 

 

 

3. orders 테이블에서 주문 수량이 3개 미만이면서 배송비(shipping_fee)가 15000원보다 비싼 주문을 선택하는 쿼리를 작성해주세요!

 

[내가 쓴 답]

SELECT *

FROM orders

WHERE amount <3 AND shipping_fee >15000

 

헐, GPT의 답과 같다! 나..발전하고 있는 걸까?

 설명
- amount < 3: 주문 수량이 3개 미만인 주문만 선택합니다.
- shipping_fee > 15000: 배송비가 15000원보다 비싼 주문만 선택합니다.
- SELECT *: orders 테이블의 모든 열을 선택합니다. 필요에 따라 특정 열만 선택할 수 있습니다.

 

4. orders 테이블에서 배송비가 높은 금액 순으로 정렬하는 쿼리를 작성해주세요!

 

[내가 쓴 답]

SELECT *

FROM orders

order by shipping_fee DESC

 

 

헐, 헐,,,, 또 GPT의 답과 같다! ㅎㅎㅎㅎ

 

 

뿌듯하게 마무리!