[2025.01.22] 사전캠프 8일차 아티클스터디+Subquery실습문제

김명서·2025년 1월 22일
1

TIL_sparta

목록 보기
9/60

그동안 준비했던 공모전 마감일이 오늘이라, 아티클 스터디가 끝난 뒤 갑자기 회의가 잡혔다. 5시까지는 여기에 발이 묶여서 오늘 자습을 많이 하지 못했다..😥
이제 오전시간도 잘 이용해서 보충해야겠다.

아티클스터디

오늘의 아티클
https://yozm.wishket.com/magazine/detail/1519/
[주제]

  • sql문 가독성을 높이는 법

[아티클 요약]

  1. 예약어는 대문자로
    SELECT, FROM, GROUP BY, HAVING, AS, AND와 같은 SQL예약어를 대문자로 쓰는 습관 들이기
  2. 행갈아쓰기 [특히 SELECT,FROM,GROUP BY]
  3. 더 자주 행갈아쓰기 [WHERE, AND, OR]
    → 두 컬럼을 불러왔던 SQL문에서 칼럼을 하나만 남기고 싶다?
    SELECT day, time에서
    SELECT day
    - - time 으로 라인을 주석처리해주면 time컬럼을 로직에서 제외할 수 있다.

✅SQL잘하는 분들의 팁
WHERE절 시작하자마자 1=1이라는 아무의미 없는 조건을 넣어주고 행갈이를 한다음에 AND로 진짜 필터링을 하는 재밌는 응용도 있다.
4. 주석을 쓰자
=코드를 쓴 의도를 짧게 적어놓기
서브쿼리 단위, CASE,IF조건문 또는 WHERE절 필터링 조건을 쓸 때
무엇을?😮
-서브쿼리 단위로 의미 적기

  • 단순히 무엇(what)인지 적기보다는, ‘결제자의 성별이 여성인 경우’, ‘요일별 매출액 합계 계산’, ‘일별X 요일별O’, ‘조건이 왜 필요한지, 어떻게 동작하는지’ 에 대한 자세한 내용을 기록
  1. Alias를 잘쓰자

=변수 별명짓기 (당장은 귀찮아도 전체 코드를 빠르게 이해하기 위해,, 그냥 변수로만 적어둔다면, 나중에 다시 찾아와야하는 상황이 발생할 수 있음)

google-’변수명 짓기 팁’을 검색해보자

  1. 가장 중요한건 합의된 규칙

[인사이트]

💡변수명 짓기 구글링 결과

아직 변수명 짓는 법에 감이 안온다. 이렇게까지 복잡한 함수나 변수를 다뤄본 적이 없고 대부분 문제에 주어져 있었기 때문이다.
그치만 변수명을 구체적으로 작성할 수 있다는 것에 대해 알게되었고, 변수를 이렇게 작성하기 위해서는 변수의 기본 개념과 종류에 대해서도 잘 알고 있어야할 것 같다.

행을 갈아쓰는 것에 대한 중요성은 이미 체감하고 있었고, 종종 문제를 풀면서 주석을 잘 활용해봐야겠다. (특정 칼럼을 불러온 것과 불러오지 않은 것에 차이를 모를 때는, 전체 삭제하고 다시 입력해서 실행했었는데, 주석을 쓰는게 훨씬 효율적일 것 같다)

💡주석달기 팁
[한줄주석]
#문장
또는
--문장
[여러줄주석]
/문장
문장
문장
/
[단축키]
WIN) Ctrl+/ (주석 전환/해제 모두 가능)

(인사이트 정리하는 데 참고한 사이트: https://m.blog.naver.com/kijun/222930802349)

.
.
.

4-4.[실습]복잡한 연산을 Subquery 로 수행하기

문제_1) 음식 타입별 총 주문수량과 음식점 수를 연산하고, 주문수량과 음식점수 별 수수료율을 산정하기

(음식점수 5개 이상, 주문수 30개 이상 → 수수료 0.5%
음식점수 5개 이상, 주문수 30개 미만 → 수수료 0.8%
음식점수 5개 미만, 주문수 30개 이상 → 수수료 1%
음식점수 5개 미만, 주문수 30개 미만 → 수수로 2%)

연산,,,,? 더하는 거겠지..?음 COUNT인가..암튼 이걸 서브쿼리로 넣어야될 것같은데...
강의 살짝 봄 -> 아 quantity 더하고 restaurant_name은 숫자가 아니니까 count 해줘야겠군.근데 중복으로 세면 안되니까 중복없이=distinct
내가 놓쳤던 부분 _

sum(quantity)
count(distinct restaurant_name) 

🔴sum, count 하고 괄호 까먹지 말기 !!!

근데.. 나 맞게 한 것 같은데 왜 자꾸 안되냐...

알았다... 칼럼 여러개 불러올 때는 ,잘 썼는데
함수로 넘어갈 때 ,를 안썼다...
행 갈고 ,쓰는 걸 진짜 습관화 해야겠다
from
(
서브쿼리
) a 도 다시한 번 기억~!

🔻최종 코드

select cuisine_type
,total_quantity
,count_res
,case 
	when count_res>=5 and total_quantity>=30 then 0.005	
	when count_res>=5 and total_quantity<30 then 0.008
	when count_res<5 and total_quantity>=30 then 0.01
	when count_res<5 and total_quantity<30 then 0.02
end rate
from
 (
select cuisine_type
,sum(quantity) total_quantity
,count(distinct restaurant_name) count_res
from food_orders
group by 1
) a

음식타입별이 아닌, 지역별이라면?

SELECT 시도,
       total_quantity,
       count_res,
       CASE 
           WHEN count_res >= 5 AND total_quantity >= 30 THEN 0.005
           WHEN count_res >= 5 AND total_quantity < 30 THEN 0.008
           WHEN count_res < 5 AND total_quantity >= 30 THEN 0.01
           WHEN count_res < 5 AND total_quantity < 30 THEN 0.02
       END rate
FROM
(
    SELECT 
        SUBSTR(addr, 1, 2) "시도", -- 지역 이름을 주소 필드에서 추출
        SUM(quantity)  total_quantity,
        COUNT(DISTINCT restaurant_name) count_res
    FROM food_orders
    GROUP BY 1
) a

답 맞겠지..?ㅎㅎ..

문제_2)음식점의 총 주문수량과 주문 금액을 연산하고, 주문 수량을 기반으로 수수료 할인율 구하기

(할인조건
수량이 5개 이하 → 10%
수량이 15개 초과, 총 주문금액이 300000 이상 → 0.5%
이 외에는 일괄 1%)

전체적으로 쓰고 서브쿼리 오류때문일까봐, 그럼 너무 화가날까봐! 서브쿼리식 이상없나 먼저 돌려봤다

오키 잘 되는군

🔻스스로 쓴 코드

select restaurant_name
,case when total_quantity<=5 then 0.1
when total_quantity>15 and total_price>=30000 then 0.005
else 0.01
end "수수료할인율"
from
(
select restaurant_name
,sum(quantity) total_quantity
,sum(price) total_price
from food_orders
group by 1
) a

가격은 total이 아니라, sum으로 별명짓는게 맞겠다.
그리고 총합가격이랑, 총수량을 같이 볼 수 있게 본 쿼리식 select에서 함께 불러와줘야겠다 !

느낀점

어제까지만해도 서브쿼리가 너무 생소하고 정답 코드를 봐도 너무 헷갈렸는데,
확실히 실습문제 먼저 부딪혀보고 강의 보고 부족했던 부분 메꾸고 ..이런식으로 시도해보니까 (시간은 좀 걸렸지만) 마침내 마지막 2문제는 혼자 해낼 수 있었다 !

내일 배울 내용도 이렇게 잘 해봐야지 :)
오늘 공부 못한 부분은, 내일 오전시간을 활용해서라도 채워야겠다 ㅠㅠ 나혼자 진도가 늦어지면,, 팀원들의 의욕을 떨어뜨릴 것 같달까,, 같이 으쌰으쌰 했으면 좋겠다😊

내일 아티클 스터디 마치고, 4주차 완강+5주차 진입이 목표!
벌써 수요일이 지났군. 이번주도 마무리 잘해야겠다🔥

profile
경영학도의 데이터분석 성장기💥

0개의 댓글

관련 채용 정보