【SQL기초】세대마다 인원수를 표시한다

소개



이번에는 MySQL에서 세대별 인원수를 표시하는 방법에 대해 정리합니다.

(참고) 데이터 분석 스킬 체크


카테고리
프로그래밍


레벨
★☆☆

체크 항목
SQL로 간단한 SELECT문을 기술·실행할 수 있다(부질의를 포함하지 않는, 2테이블 정도의 조인과 간단한 WHERE조건을 포함한 SELECT문)



사용할 데이터



이번에는 다음 데이터로 연습합니다.


이름
age


니노미야
22

마츠모토
24

나카이
22

기무라
32

카토리
29

사쿠라이
22

오카다
25

나가세
23

미야케
36

모리타
35

오노
40

쿠사나기
44

이나가키
33


GROUP BY를 사용해보기



먼저 GROUP BY에서 각 연령의 인원수를 살펴보겠습니다. 20대가 많네요.
SELECT
    age AS 年齢, 
    COUNT(*) AS 人数
FROM
    table_name 
GROUP BY age;



Where로 조건을 좁히기



다음과 같이 WHERE를 결합합니다.
이 방법이라면 'age'열에서 10, 20, 30, 40세 딱 맞는 데이터를 검색하여 카운트해 줍니다.
SELECT
    age AS 年齢, 
    COUNT(*) AS 人数
FROM
    table_name 
WHERE
    age = 10 OR age = 20 OR age = 30 OR age = 40 OR age = 50
GROUP BY age;



DIV를 사용하여 그룹화



'age'열의 숫자를 DIV를 사용하여 10으로 나누고 잘라낸 다음 그룹화하여
각 그룹의 데이터 수를 계산합니다.
예를 들어, 20~29의 수치는 모두 2가 되므로 동일 그룹으로 간주됩니다.
SELECT
    age AS 年代,
    COUNT(*) AS 人数
FROM
    table_name 
GROUP BY
    age DIV 10;

그룹별로 가장 낮은 수치가 셀에 있기 때문에, 이대로는 데이터량이 적을 때는 주의가 필요합니다. 예를 들어 20대에서도 가장 낮은 숫자가 23인 경우에는 23이 표시됩니다.



CONCAT 함수를 사용하여 인덱스 생성



그럴 때는 CONCAT 함수를 사용하여 색인이 될 열을 만듭니다.
SELECT
    CONCAT( (age DIV 10) * 10, "代") AS 年代,
    COUNT(*) AS 人数
FROM
    table_name 
GROUP BY
    age DIV 10



참고 htp // 우야마자 k. 하테나 bぉg. 코m/엔트리/2017/08/18/144725

CASE 문에서보다 유연하게 숫자 범위 지정



18세 이하 등 범위 지정이 유연하게 필요한 경우에는 다음과 같은 방법이 필요합니다.
그 밖에 더 좋은 방법이 있으면 알려주세요!
SELECT
    CASE
        WHEN age <18 THEN 'Under 18' 
        WHEN age between 18 AND 24 THEN '18-24' 
        WHEN age between 25 AND 34 THEN '25-34'
        WHEN age between 35 AND 44 THEN '35-44'
    END AS 年代,
    Count(*) AS 人数
FROM
    table_name 
GROUP BY 年代;



참고 htps : // 놀라운 l. 코m/쿠에 s치온 s/51772

좋은 웹페이지 즐겨찾기