안녕하십니까 다제입니다.
오늘부터는 sql 문법에 대해서 공부를 진행하였습니다.
오늘은 ⑩그루핑에 대해서 배워보도록 하겠습니다.
1. 그루핑
1) 각 성별에 대한 숫자 구하기
SELECT gender COUNT(*) FROM main.member GROUP BY gender;
# * : 조회되는 row의 개수를 구해주는 표현식
2) 각 성별에 대한 평균 구하기
SELECT
gender,
COUNT(*),
AVG(height),
MIN(weight)
FROM main.member
GROUP BY gender;
3) 그루핑 + SUBSTRING
SELECT
SUBSTRING(address, 1, 2) AS region,
COUNT(*)
FROM main.member
GROUP BY SUBSTRING(address, 1, 2);
4) 여러개의 feature로 그루핑하기
SELECT
SUBSTRING(address, 1, 2) AS region,
gender,
COUNT(*)
FROM main.member
GROUP BY
SUBSTRING(address, 1, 2),
gender;
5) 여러개의 feature로 그루핑한 후 특정 부분만 출력하기
SELECT
SUBSTRING(address, 1, 2) AS region,
gender,
COUNT(*)
FROM main.member
GROUP BY
SUBSTRING(address, 1, 2),
gender
Having
region = "서울"
AND gender = "m";
-. Having으로 이렇게 그루핑된 정보를 selection 할 수 있다.
-. 그런데, WHERE로 조건을 걸어도 되지 않을까? 이런 생각을 해보았다.
-. 찾아보니 WHERE의 목적은 TABLE에서 row를 선택하기 위한 것이고 Having은 이미 선택된 row 중에서 그루핑된 row를 선택할 때 사용하는 method입니다.
6) 여러개의 feature로 그루핑 + NULL제거 + 정렬하기
SELECT
SUBSTRING(address, 1, 2) AS region,
gender,
COUNT(*)
FROM main.member
GROUP BY
SUBSTRING(address, 1, 2),
gender
HAVING region IS NOT NULL
ORDER BY
region ASC,
gender DESC;
-. 단 select된 feature만 그루핑이 될 수 있다는 점은 유의해야한다고 합니다. 안그러면 error Code:1055 Expression #3을 만나실 수 있습니다.
7) 여러개의 feature로 그루핑 + 새로운 feature + 정렬하기
SELECT
category,
main_month,
COUNT(*) AS "횟수",
SUM(view_count) AS "이용수"
FROM 2020_movie_report
GROUP BY category, main_month
HAVING
main_month = 3
AND sum(view_count) >= 7000000
;
-. 위 설명처럼 GROUP BY에 들어가있지 않는 feature를 SELECT에 넣을 수 없습니다.
-. 이에, GROUP BY에 이용되지 않는 feature를 집계함수에 넣어서 새로운 feature를 만들어주어야합니다.
-. 정리를 해보자면, GROUP BY를 사용하려면 select문에 들어가는 COLUMN이거나, 집계 함수로 표현 되어야 한다.
2. SQL Code 작성하는 순서와 실행되는 순서
SQL 작성하는 순서 | SQL 실행되는 순서 |
|
|
- FROM : 테이블 선택
- WHERE : 해당 테이블에서 특정 조건(들)을 만족하는 row들만 선택
- GROUP BY : row들을 그루핑 기준대로 그루핑 → 하나의 그룹은 하나의 row로 출력
- HAVING : 그루핑 작업 후 생성된 여러 그룹들 중에서, 특정 조건(들)을 만족하는 그룹들만 선택
- SELECT : 모든 컬럼 또는 특정 컬럼들을 조회 → SELECT 절에서 컬럼 이름에 alias를 붙인 게 있다면, 이 이후 단계(ORDER BY, LIMIT)부터는 해당 alias를 사용가능
- ORDER BY : 각 row를 특정 기준에 따라서 정렬
- LIMIT : 이전 단계까지 조회된 row들 중 일부 row들만 출력
쿼리문을 이해하는데 위 순서는 생각보다 중요했었습니다.
앞으로 원활한 학습을 위해 해당 순서를 외워주시면 감사드리겠습니다.
감사합니다.
'Code > SQL' 카테고리의 다른 글
MySQL 기초부터 훑어보기6(Table) (0) | 2021.03.08 |
---|---|
MySQL 기초부터 훑어보기5( Subquery, view) (0) | 2021.03.07 |
MySQL 기초부터 훑어보기4(ForeignKey, Join) (0) | 2021.03.07 |
MySQL 기초부터 훑어보기2(NUMBER, NULL, FEATURE연산 외) (0) | 2021.03.06 |
MySQL 기초부터 훑어보기1(INDEXING, SORTING) (0) | 2021.03.06 |