DB/SQL 예제
[SQL예제][PostreSQL] 1. 데이터 조회 및 필터링(MAX(), ORDER BY, LIMIT, DISTINCT, OVER())
키세스라고
2023. 3. 3. 15:40
PAYMENT 테이블에서 단일 거래의 AMOUNT의 액수가 가장 많은 고객들의 CUSTOMER_ID를 추출하라. 단, CUSTOMER_ID의 값은 유일해야 한다.
# 풀이 순서
- 가장 큰 AMOUNT 값을 찾는다.
- WHERE 를 통해 가장 큰 AMOUNT 갖는 단일 거래들을 찾는다.
- 조회한 거래에서 CUSTOMER_ID 의 중복을 제거하여 고객 명단을 뽑느다.
# 문제 풀이
1. 가장 큰 AMOUNT 찾기
a) max() 사용
SELECT MAX(P2.AMOUNT)
FROM PAYMENT P2
MAX()
b) order by, limit 사용
SELECT P2.AMOUNT
FROM PAYMENT P2
ORDER BY P2.AMOUNT DESC
LIMIT 1
ORDERY BY
LIMIT
2. 가장 큰 AMOUNT 를 가지는 단일 거래들 찾기 + CUSTOMER_ID 중복 제거
a) 서브쿼리 사용
SELECT DISTINCT P.CUSTOMER_ID
FROM PAYMENT P
WHERE P.AMOUNT = (SELECT MAX(P2.AMOUNT)
FROM PAYMENT P2)
ORDER BY P.CUSTOMER_ID
DISTINCT
b) 위 방법은 PAYMENT 테이블을 두 번 조회한다. 는 내용이 있어서 아래와 같이 작성함
SELECT DISTINCT CUSTOMER_ID
FROM (SELECT CUSTOMER_ID, AMOUNT, MAX(AMOUNT) OVER() AS MAXAMOUNT
FROM PAYMENT) P
WHERE AMOUNT = P.MAXAMOUNT
ORDER BY CUSTOMER_ID
OVER()