728x90
반응형

https://dev.mysql.com/


 

 

 

 

안녕하십니까 다제입니다. 

오늘부터는 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 실행되는 순서
  1. SELECT 
  2. FROM
  3. WHERE
  4. GROUP BY
  5. HAVING 
  6. ORDER BY
  7. LIMIT 
  1. FROM
  2. WHERE 
  3. GROUP BY
  4. HAVING 
  5. SELECT
  6. ORDER BY
  7. LIMIT 

 

  1. FROM : 테이블 선택 
  2. WHERE : 해당 테이블에서 특정 조건(들)을 만족하는 row들만 선택
  3. GROUP BY : row들을 그루핑 기준대로 그루핑 → 하나의 그룹은 하나의 row로 출력
  4. HAVING : 그루핑 작업 후 생성된 여러 그룹들 중에서, 특정 조건(들)을 만족하는 그룹들만 선택
  5. SELECT : 모든 컬럼 또는 특정 컬럼들을 조회 → SELECT 절에서 컬럼 이름에 alias를 붙인 게 있다면, 이 이후 단계(ORDER BY, LIMIT)부터는 해당 alias를 사용가능
  6. ORDER BY : 각 row를 특정 기준에 따라서 정렬 
  7. LIMIT : 이전 단계까지 조회된 row들 중 일부 row들만 출력

 

 

 


 

 

 

 

쿼리문을 이해하는데 위 순서는 생각보다 중요했었습니다. 

 

앞으로 원활한 학습을 위해 해당 순서를 외워주시면 감사드리겠습니다. 

 

감사합니다. 

728x90
반응형

+ Recent posts