**** 정리 ****
GROUP BY : 같은 값끼리 모아서 그룹화한다
특정 컬럼을 기준으로 그룹화하여 집계(합, 평균, MAX, MIN 등)

SELECT
--집계할컬럼1,
--집계 함수(COUNT, MAX, MIN 등)
FROM Table
GROUP BY
--집계할컬럼1
AVG
MAX
MIN
SUM
COUNT
COUNTIF : 조건이 있는 컬럼의 수를 알고 싶은 경우
COUNTIF(컬럼 = 3)
DISTINCT : 중복을 제거하고 Unique한 값만 보고 싶을 때 사용
- COUNT(DISTINCT 컬럼) 으로 자주 사용
SELECT
--집계할 컬럼,
--COUNT(DISTINCT 컬럼)
FROM Table
GROUP BY
--집계할 컬럼
COUNT(user_id) => 전체 view 수
COUNT(DISTINCT user_id) => 중복없는 view 수 => user 수
일자별 집계
: 특정 시간에 어떤 유저가 한 행동이 기록된 데이터->일자별, 시간대별로 집계
연령대별 집계
: 특정 연령대에서 더 많이 구매했는가?
특정 타입별 집계
: 특정 제품 타입을 더 많이 구매했는가?
앱 화면별 집계
: 어떤 화면에 유저가 많이 접근했는가?
조합: 일자별 + 제품 타입별 판매량(count), 매출(sum)
: Table에 있는 컬럼에 바로 조건을 설정하고 싶은 경우
: GROUP BY를 통해 생성된 컬럼에 조건을 설정하고 싶은 경우
SELECT
--컬럼1, 컬럼2,
--COUNT(컬럼1) AS col1_cnt
FROM Table
WHERE
--컬럼1 >= 3
GROUP BY 컬럼1, 컬럼2
HAVING
--col1_cnt >= 3
: SELECT문 안에 존재하는 SELECT 쿼리
서브 쿼리 작성하고, 서브쿼리 바깥에서 WHERE 조건 설정 = 서브 쿼리에서 HAVING으로 조건 설정
-> 서브 쿼리가 하나의 table로 작용하기 때문
SELECT
--*
FROM (
--SELECT
----컬럼1,
----COUNT(컬럼1) AS col1_cnt
--FROM Table
--GROUP BY 컬럼1
)
WHERE
--col1_cnt >= 3SELECT
--*
FROM (
--SELECT
----컬럼1,
----COUNT(컬럼1) AS col1_cnt
--FROM Table
--GROUP BY 컬럼1
--HAVING
----col1_cnt >= 3
)
: 정렬하기. 쿼리의 맨 마지막에 작성.
ORDER BY => 모든 ROW에서 확인해서 재정렬 => 연산이 많이 소요 => 시간이 오래 걸린다
=> SELECT 제일 바깥에서 1번만 작성하면 된다
DESC : 내림차순
ASC : 오름차순 (Default)
SELECT
--컬럼
FROM Table
ORDER BY 컬럼 DESC
: 퀄리문의 출력 row 개수를 제한할 때 사용. ORDER BY보다 더 마지막에 작성.
SELECT
--컬럼
FROM Table
LIMIT 10
연습문제
1. 포켓몬의 수를 타입 별로 집계하고, 포켓몬의 수가 10 이상인 타입만 남기는 쿼리를 작성해주세요. 포켓몬의 수가 많은 순으로 정렬해주세요.
테이블: pokemon, 컬럼: , 조건: 없음, 집계 후 조건: 포켓몬 수 10 이상, 그룹화 컬럼: type1, 집계 함수: count, 정렬: order by 포켓몬 수 desc
SELECT
type1,
COUNT(id) as cnt
FROM basic.pokemon
GROUP BY
type1
HAVING
cnt >= 10
ORDER BY cnt desc