본문 바로가기

DB/SQL 예제4

[SQL예제][PostgreSQL] 4. 조인과 집계데이터(INNER JOIN, ON, ROW_NUMBER(), OVER(), COUNT()) RENTAL과 CUSTOMER 테이블을 이용하여 현재까지 가장 많이 RENTAL을 한 고객의 고객ID, 렌탈순위, 누적렌탈횟수, 이름을 출력하라 # 풀이 순서 테이블 CUSTOMER 와 RENTAL 을 INNER JOIN 하여 고객의 ID, 성, 이름 과 찍지어준다. COUNT() 를 사용하여 고객의 렌탈 횟수를 조회한다. ROW_NUMBER() 와 OVER() 를 사용하여 순위를 매겨준다. # 문제 풀이 1. 두 테이블을 조인하여 교집합 부분만 조회한다. - 고객 아이디, 성, 이름, RENTAL_ID 만 조회 SELECT C.CUSTOMER_ID , C.FIRST_NAME , C.LAST_NAME , R.RENTAL_ID FROM RENTAL R INNER JOIN CUSTOMER C ON R.CUS.. 2023. 3. 7.
[SQL예제][PostgreSQL] 3. 조인과 집계데이터(COUNT(), TO_CHAR, GROUP BY, ROLLUP) RENTAL 테이블을 이용하여 연, 연월, 연월일, 전체 각각의 기준으로 RENTAL_ID 기준 렌탈이 일어난 횟수를 출력하라. (전체 데이터 기준으로 모든행을 출력) # 풀이 순서 TO_CHAR() 를 사용하여 RENTAL_DATE 를 전체, 연도, 연월, 연월일 기준으로 구분한다. GROUP BY 와 ROLLUP, COUNT() 를 사용하여 각 단위(?)별로 집계한다. 큰 단위부터 (상위 그룹부터) GROUP BY 로 묶어줘야한다. # 문제 풀이 1. COUNT(RENTAL_DATE) 를 사용하여 전체 건수를 조회한다. SELECT COUNT(RENTAL_ID) FROM RANTAL COUNT() 2. TO_CHAR() 와 GROUP BY 를 사용하여 연도 별 합계부터 조회한다. SELECT TO_C.. 2023. 3. 6.
[SQL예제][PostgreSQL] 2. 데이터 조회 및 필터링(LIKE, NOT LIKE) 고객들에게 단체 이메일을 전송 하고자 한다. CUSTOMER 테이블에서 고객의 EMAIL 주소를 추출하고, 이메일 형식에 맞지 않는 이메일 주소는 제외시켜라. (이메일 형식은 ‘@’가 존재해야 하고 ‘@’로 시작하지 말아야 하고 ‘@’로 끝나지 말아야 한다.) # 풀이 순서 WHERE 조건으로 EMAIL 컬럼을 대상으로 LIKE, NOT LIKE 사용 # 문제 풀이 1. LIKE 사용하여 '@' 가 글자 사이에 존재하는 모든 행 조회 2. NOT LIKE 를 사용하여 '@' 로 시작하거나 끝나는 행 제거 SELECT EMAIL FROM CUSTOMER WHERE EMAIL LIKE '%@%' AND EMAIL NOT LIKE '@%' AND EMAIL NOT LIKE '%@' LIKE 2023. 3. 3.
[SQL예제][PostreSQL] 1. 데이터 조회 및 필터링(MAX(), ORDER BY, LIMIT, DISTINCT, OVER()) 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. 가장 큰 AMO.. 2023. 3. 3.