subquery 기능 , 조건이 여러개이고 복잡한 연산이 있을 때 한번 계산 해주고 이 계산을 ()로 묶어주기
그 위로 다시 select, from 문 이용해서 구해주기
문제 ) 50세 이상 고객의 연령에 따라 경로 할인율을 적용하고, 음식타입별로 원래 가격과 할인 적용 가격 합을 구하기
(조회 컬럼:음식타입, 원래가격, 할인 적용 가격, 할인 가격)
(할인률 공식 : 나이 -50 *0.005)
( 고객 정보가 없는 경우도 포함하여 조회 -> left join)
1. 서브쿼리안에 where절 만들어 우선 50세 이상 고객이라는 조건으로 1차 분류 그리고 (나이에 -50 해서 *0.005를 한 컬럼) dis_price 도 만들어 주기
2. 본 쿼리에 가격의 합, 할인 적용가격 (원래 가격 - dis_price),할인가격의 합 넣어주기
join - 각 테이블에 놔눠져 있는 정보들을 필요한 부분을 모아서 하는 것
if 가격과 결제수단을 함께 나타내고 싶지만 가격은 주문 테이블 , 결제수단은 결제 테이블에 나누어져 있으면
join을 이용해 하나로 나타내주기
2. where 컬럼명 is not null
조건을 주는 where 절에 컬럼명 is not null 을 붙여줘서 null값은 나오지 않게한느 법
실습에 사용한 함수
1.rank와 over 은 세트라고 생각
rank() over( patition by cuisine type order by )
형태는 비슷함
SUM () OVER() 다른 함수를 써도 괄호, PARTITON BY 무슨 컬럼으로 묶어줄 건지는 똑같음
select rank()over (partition by 컬럼명 order by)
from 테이블명

피벗 테이블 만드는


셀렉트 옆 에이지가

퀴진타입처럽 이렇게 로우 형태로 나옴
행으로 할 컬럼명을 먼저 적어주면 됨
컬럼명에 지정 이름에 따라 겹치면 또 값이 다르게 나올 수도 있음 age가 컬럼명이랑 case when문으로 사용 했을 때 이상하게 나온다고 해서 처음부터 같은 이름 있으면 age_group과 같이 그냥 다르게 설정하기
그리고 연령은 10-59세 사이가 조건이 되기 때문에 where절 사용해서 조건으로 묶어줬음
음식타입별, 연령별이니까 그룹 바이는 1,2로 서브쿼리 닫기.
if안에 들어가는 값은 age컬럼명이 아니라 case when 으로 계산해줫던 age_GROUP 을 사용해서 구하는 거임
MAX(IF(age_group=10, cnt_order,0)) "10대"
'DATABASE > SQL' 카테고리의 다른 글
| 사전캠프3일차 - SQL 3주차 (0) | 2025.03.19 |
|---|---|
| 3/18일 SQL-2주차 내용 + 사전 과제 1 (0) | 2025.03.18 |
| 사전캠프 1일차 -SQL 1주차 (0) | 2025.03.17 |