본문 바로가기
> 프로그래밍 언어/SQL

[SQL 데이터 분석, 활용!] 섹션 7. 그룹화의 집계

by 자몽주스 2023. 2. 16.
728x90
반응형

 

[개념은 호옹~, 실습 빡]

SQL 데이터 분석, 활용!

참고사이트:

SQL, 데이터 분석! | CloudStudying

서브쿼리 (Feat. 카페매출)
서브쿼리. 무엇?

서브쿼리:

쿼리 속에 존재하는 또 다른 쿼리로서,

먼저 수행된 쿼리의 결과를 갖고

다시 쿼리를 수행하는 문법

- 수학점수가 평균보다 높은 학생을

찾는다고 가정 -

 

1) 먼저 수학점수의 평균을 

서브 쿼리로 계산해 볼 수 있다

 

 그 결과를 기준으로

학생 정보를 필터링 할 수 있다

이떄, 먼저 수행되는 안 쪽 쿼리가

서브쿼리이다

 

그 결과를 이용하는 바깥 쪽 쿼리는

메인쿼리이다

- 서브쿼리가 쓰이는 위치 - 

각자의 위치에 따라 형태의 제약이 있다

- SELECT 절 -

1행 1열의 단일값만 사용할 수 있다

 

- FROM절, JOIN절 -

행과 열의 크기는 상관이 없지만,

반드시 별칭을 붙여줘야 한다

 

- WHERE 절 -

사용자의 연산자에 따라

서브쿼리의 결과 크기가 제한된다

1행 1열의 단일 값 또는

N행 1열이 될 수 있다

SELECT 절 서브쿼리

 

 

-   SELECT 절 서브쿼리 사용-

최대 가격과의 차이 찾기:

최대 가격과의 차이가 테이블에 존재하지 않으므로

기존 가격 PRICE 에서 가장 비싼 값을 뺴서 구한다

PRICE - 5800

 

1) 음료 전체를 조회해서 데이터 확인을 먼저 해준다

 

2)  음료명 / 가격 / 최대가격과의 차이를 구해준다

최대 가격과의 차이

beverages 에 존재하지 않기 때문에

직접 계산해줘야 함

 

PRICE - 가장비싼값 

 

\만약, 5800원을 알고있지 못하는 경우엔,

직접 넣지 말고 쿼리를 통해 계산한다

5800 원이 하단의 서브 쿼리를 통해서

계산이 된다

 계산된 결과를 괄호 안에 넣어주고,

메인쿼리 작동시켜준다

서브쿼리 작성 시 주의:

세미콜론(;) 을 넣어주면 안된다

SELECT 안 쪽의 서브쿼리는

반드시 1행 1열의 값을 받아내야한다

FROM 절 서브쿼리

한 번 음료를 주문할 때

보통 음료가 몇 개씩 주문되는지 계산하기

 ORDER_ID가 1번인 건

COUNT가 1이니까

1번 음료에는 하나의 음료만 주문되는 것이다

 

2번은 7개

ORDER_ID 를 기준으로

그룹화 해서

각각의 그룹별로 집계를 구해준다

 

14번은 11개

그룹 별 SUM에서 집계한 내용을 갖고

평균을 구한다

(AVG 집계함수 사용)

 

결과가 3.27 이 나오게 해주면 됨

쿼리 작성

이 데이터를 갖고 다시 집계해서

평균을 구한다

평균 구하기 위해 위와 같이쓰면

에러 발생:

집계함수는 중첩해서 사용 불가

FROM 절 서브쿼리 사용하기

SUM으로 집계한 걸

다시 한번 AVG 집계한다

서브쿼리는 세미콜론이 없어야 함

FROM 절 안에 세미콜론 X

FROM 절의 서브쿼리는

반드시 별칭을 달아줘야 하므로

AS 를 사용한다

평균 구하기

JOIN 절 서브쿼리

- JOIN 절 서브쿼리 활용 -

주문개수

우측 표 COUNT를

집계해갖고

만들 수 있음

 

그룹화와 집계

 

결과를 음료명에다가 붙여주면 된다

자몽에이드의 NULL 값을 0 값으로 출력하는 방법:
묶어서 COALESCE 라는 함수를 넣어줌

TOTAL_COUNT 값이 NULL 인 경우에 나올

쉼표 뒤에 넣어준다

WHERE 절 서브쿼리

1) 우측의 음료 테이블 갖고 평균값을 먼저 구한다 

2) 평균값을 갖고 필터링을 해 준다

3) 평균으로 서브쿼리를 먼저 구한다음

괄호안에 (????)  넣어준다

서브쿼리와 IN, ALL, ANY 연산개요

WEHRE 절 서브쿼리:

단순비교를 통한 서브쿼리 필터


단일 값 또는 단 COLUNM 이어야 함

 

 

IN, ALL, ANY:

단일 열이 가능한 경우


단일 값이 COLUNM 이어야 함

 

IN 연산:
포함 여부를 검사

 

서브쿼리가 단일 컬럼 A,B,C를 갖고왔다면

성적이 A,B,C 인 학생만 필터링한다

 

ALL 연산:
모두를 만족하는 걸 찾아준다

서브쿼리가 단일 열 80, 72, 68 을 갖고왔다면

메인쿼리는 이걸 갖고

비교연산을 ALL과 함께 수행한다

수학점수가 이들 모두보다 큰 학생만 필터링 해 줌

ANY 연산:

하나라도 만족하면 된다

서브쿼리 값이 단일열 80, 72, 68 일 때

메인쿼리는 하나만이라도 작은 것을 갖고온다

서브쿼리와 IN 연산

두 쿼리를 조합해서

판매량 상위 3개 음료 조회하기

우측의 주문내역 테이블 갖고

상위 3개 음료 찾아준다

1) 음료 별 데이터 그룹화

2) 상위 3개의 음료 정보를 추출하고

3) 그걸로 각각의 ID와 음료명 추출

 서브쿼리와 ALL 연산

가격 뽑아와서

메인쿼리에 삽입해주면 된다

뽑아온 거 갖고

그 가격보다 모두 작은 값을 기준으로

데이터를 필터링 함

서브 쿼리와 ANY 연산

 

728x90
반응형