Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags more
Archives
Today
Total
관리 메뉴

헤맨 만큼 내 땅

[SQL] 공부하다 깨달은 (4) 본문

데이터

[SQL] 공부하다 깨달은 (4)

Ddani_ng 2025. 4. 11. 18:28
[실습] 50세 이상 고객의 연령에 따라 경로 할인율을 적용하고, 음식 타입별로 원래 가격과 할인 적용 가격 합을 구하기 
-(조회 컬럼 : 음식 타입, 원래 가격, 할인 적용 가격) 
-할인 : (나이-50)*0.005
-고객 정보가 없는 경우도 포함하여 조회, 할인 금액이 큰 순서대로 정렬

 
1차 문제 풀이 시도
 
1. 어떤 테이블에서 데이터를 뽑을 것인가 

-customers
-food_orders

 
2. 어떤 컬럼을 이용할 것인가

최종 컬럼: cuisine_type, price, total price 
서브쿼리: 
customers - costomer_id, ago, vat 
food_orders - cuisine_type, price, quantity + commission rate,

 
3. 어떤 조건을 지정해야 하는가

음식타입별 1개 가격 : price/quantity 
할인 적용 가격 : if(age>=50,0.005,1) commission rate 
-> 만약 나이가 50살보다 많거나 같다면 수수료율이 *0.005이고, 아니면 *1임 

원래 가격과 할인 적용 가격 합 : price * commission rate total price 

 
4. 어떤 함수 (수식) 을 이용해야 하는가.

->lift join, if 조건문, order by, group by 
할인 금액이 큰 순서대로 정렬: order by total price dsec 
음식 타입별 : group by cuisine_type

 
 


 
2차시도
1. 어떤 테이블에서 데이터를 뽑을 것인가

-customers 
-food_orders

 
2. 어떤 컬럼을 이용할 것인가

최종 컬럼: cuisine_type, price, total price 
서브쿼리: 
customers - costomer_id, ago, vat 
food_orders - cuisine_type, price

 
3. 어떤 조건을 지정해야 하는가

원래 가격의 총합, 할인 적용 가격의 총합 : sum(price), sum(total price) 
음식 타입별 : group by cuisine_type 
할인 적용 가격 : case when age>=50 then (age-50)*0.005 else 0 
-> 만약 나이가 50살보다 많거나 같다면 수수료율이 *0.005이고, 아니면 *1임 

원래 가격과 할인 적용 가격 합 : price * commission rate total price

 
4. 어떤 함수 (수식) 을 이용해야 하는가.

->left join, case when 조건문, order by, group by 
할인 금액이 큰 순서대로 정렬: order by total price dsec 
음식 타입별 : group by cuisine_type
/*메인 쿼리에서 보여줘야하는 컬럼-음식 타입, 원래 가격, 할인 적용 가격*/
select cuisine_type,sum(price) original_price ,sum(price_discount_per) discount_price/*메인쿼리에서는 음식 타입별로 원래 가격과 할인 적용 가격 합*/
from
(select a.customer_id,b.cuisine_type,a.age,b.price,
case when age>=50 then (age-50)*0.005 /*만약 나이가 50살보다 많거나 같다면 수수료율이 0.005이고,*/
else 0 end price_discount_per /* 아니면 0임*/
from customers a left join food_orders b on a.customer_id = b.customer_id /*고객정보 없는 경우도 포함할거임*/
order by 5 desc)a /*수수료순으로 내림차순 할거임*/
group by 1

 
지금 뭐 틀렸는데. 또 뭐지
내일 다시해봐야지 승질나...
 
 

'데이터' 카테고리의 다른 글

[SQL] 자격증 준비 (2) 기본 용어 이해  (1) 2025.04.13
[SQL] 자격증 준비 (1) SQlD란?  (0) 2025.04.13
[SQL] 공부하다 깨달은 (3)  (0) 2025.04.06
[SQL] 공부하다 깨달은 (2)  (0) 2025.04.06
[SQL] 공부하다 깨달은 (1)  (0) 2025.04.03