안녕하세요, 오늘도 기획자 팥씨입니다. 🥮
SQL 맛보기 5탄은, HAVING과 ORDER BY 입니다.

목차
1. Having
- Where = 테이블 자체에 필터를 거는 것. "테이블을 축소시킴. 테이블이 바뀜"
- Having = 뽑아온 결과물에 필터를 걸어줌.
- Group by 한 그룹함수 결과에 대해서 --> 조건을 적용하는 경우 !
- Group by 절 뒤에 작성함.
- Where 구에서는 그룹함수가 포함된 조건은 사용 불가.
1-1. 데이터 조회 순서
- FROM - 어느 테이블로부터 가지고 와
- WHERE - 테이블에서 어떤 기준으로 필터를 걸지?
- GROUP BY - 어떤 칼럼을 기준으로 그룹화를 만들지? (~별)
- HAVING - 어떤 기준을 충족하는 그룹이지?
- SELECT - 어떤 컬럼을 최종 산출하지?
*WHERE이 GROUP BY 보다 먼저 조회되기 때문에, WHERE은 어떤 그룹으로 나뉠 건지 알 수 없다.
*WHERE 말고 HAVING이 따로 존재하는 이유.

1-2. 연습하기 | 예제 7
"CO_ORDER_ITEMS 사용해서 상품 ID당 주문 지표 (주문 수, 총 상품수량, 총 금액, 주문건당 거래액) 확인하고,
주문건당 평균 거래액이 100이상인 상품 ID 확인하기"
예제7 같이풀기

*총금액 = 주문 수 X 상품 수량 곱 !!


SELECT
PRODUCT_ID,
--주문 수
count (distinct order_id) as order_cnt,
--총 상품수량
sum(quantity) as sum_quan,
--총 금액
sum(unit_price*quantity) as total_price,
--주문건당 거래액
sum(unit_price*quantity)/count(distinct order_id) as price_by_ord,
FROM `ls-data-literacy-410915.database.co_order_items`
group by PRODUCT_ID
--주문건당 평균 거래액이 100이상인 상품 ID 확인하기
having sum(unit_price*quantity)/count(distinct order_id) >= 100
--원칙상 별칭은 having에서 사용안됨 (아직 별칭 정의안됨 - 데이터 조회 순서에 따라)

2. ORDER BY | ~의 순서대로
| 나열하느라 데이터 과부하 걸릴 수 있음...ㅜ 추천하지는 않음. 구글스프레드시트에서 쓰는 것 추천
- 테이블을 특정 컬럼의 값을 기준으로 정렬하기 위한 구문
- 여러 개의 칼럼을 기준으로 정렬할 수 있음 (1. 단일칼럼 2. 복수 칼럼 모두 정렬 가능)
- 1. order by 컬럼 1 asc (desc)
- 2. order by 컬럼 1 asc, 컬럼 2 desc
- 기본 정렬 값은 ASC (오름차순)으로, 별도 명시할 필요 없음
- 모든 데이터를 산출한 후 마지막으로 데이터 정렬 > 리소스 많이 잡아먹는 편
- 컬럼명이 아닌 SELECT 구문상에서 컬럼 순서로 작성 가능
ASC?DESC?
- ascending
-
오르는, 상승적인; 위를 향한 [컴퓨터] 오름차순의
- descending
-
내려가는, 강하하는, 하향의; [컴퓨터] 내림차순의
2-1. 데이터 조회 순서
SELECT까지 이루어진 다음에 --> 마지막에 순서대로 나열함.SELECT 뒤의 N번째 열을 기준으로 나열해줘. (기본값은 오름차순)
- FROM - 어느 테이블로부터 가지고 와
- WHERE - 테이블에서 어떤 기준으로 필터를 걸지?
- GROUP BY - 어떤 칼럼을 기준으로 그룹화를 만들지? (~별)
- HAVING - 어떤 기준을 충족하는 그룹이지?
- SELECT - 어떤 컬럼을 최종 산출하지?
- ORDER BY - 검색결과를 무슨 기준으로 나열하지?

2-2 연습하기 | 예제 8
"CO_ORDER-ITEM 사용해서 상품 ID당 주문지표 (주문수, 총 상품수량, 총금액, 주문건당 거래액) 확인하고,
주문건당 평균 거래액 상위 3개 확인하기"
예제8 같이풀기

내림차순 desc, 상위 3개만 보고 싶으므로 limit 3
SELECT
PRODUCT_ID,
--주문 수
count (distinct order_id) as order_cnt,
--총 상품수량
sum(quantity) as sum_quan,
--총 금액
sum(unit_price*quantity) as total_price,
--주문건당 거래액
sum(unit_price*quantity)/count(distinct order_id) as price_by_ord,
FROM `ls-data-literacy-410915.database.co_order_items`
group by PRODUCT_ID
--order by는 select 뒤에 읽히기 때문에 별칭 써도 됨.
order by price_by_ord desc
limit 3

3. 오늘의 팥앙금🥮
- select와 from은 필수 구문, 그 외에는 선택구문이다.
- 테이블 자체를 줄인다면 WHERE, 산출된 결과물에서 데이터를 뽑는다면 HAVING 이다.
- 별칭까지 마무리된 결과를 단순 순서만 변경한다면 ORDER BY 로 오름차순/내림차순 설정하면 된다.
'[IT 서비스기획 공부]' 카테고리의 다른 글
SQL 예제풀이 (0) | 2024.01.30 |
---|---|
SQL 실무 스터디 (1) | 2024.01.29 |
기획자의 SQL 맛보기(4) GROUP BY (1) | 2024.01.23 |
기획자의 SQL 맛보기 (3) WHERE & SQL 연산자 (1) | 2024.01.23 |
기획자의 SQL 맛보기 (2) SELECT, FROM 구문 (1) | 2024.01.14 |