Database/SQL

SQL : Group by, Order by, 별칭(Alias)

빔네모 2023. 11. 26. 18:37

- 데이터 분석의 목적: 쌓여있는 날것의 데이터 → 의미를 갖는 '정보'로의 변환

- 더 나아가면? '범주 (category)' 각각의 정보 (예) 과목별 신청자 평균 연령, 과목별 신청자수, 성씨별 회원수 등

- 통계 구하기: 기존 방법의 한계. 기존의 방법대로만 한다면 where 절을 사용해서 수십개의 쿼리를 작성해야 함.

 

그래서 이걸 사용한다.

 

- 동일한 범주의 데이터를 묶어주는 Group by

동일한 범주를 갖는 데이터를 하나로 묶어서, 범주별 통계를 내주는 것을 의미

Group by를 이용하면 1) 같은 성씨의 데이터를 하나로 묶고 2) 각 성씨의 회원수를 구할 수 있음

 

- 깔끔하게 데이터를 정렬해보자: Order by

오름차순 또는 내림차순으로 정렬

 

1. 범주의 통계를 내주는 Group by

-- 예) 성씨별 회원수를 Group by로 쉽게 구해보기
select name, count(*) from users
group by name;

- Group by 제대로 알아보기

SQL 쿼리가 실행되는 순서 from → group by → select

1. from users: users 테이블 데이터 전체를 가져온다.

2. group by name: users 테이블 데이터에서 같은 name을 갖는 데이터를 합쳐준다.

3. select name, count(*): name에 따라 합쳐진 데이터가 각각 몇 개가 합쳐진 것인지 세어준다.

    예) 이**, 이**, 김**, 김**, 박** 이렇게 데이터가 있었다면, 이는 2개, 김은 2개, 박**은 1개

 

- Group by로 통계내기

*동일한 범주의 개수 구하기 : count(*)

select 범주별로 세어주고 싶은 필드명, count(*) from 테이블명
group by 범주별로 세어주고 싶은 필드명;

 

*동일한 범주에서의 최솟값, 최댓값, 평균값 구하기 : min(필드명), max(필드명), avg(필드명)

select 범주가 담긴 필드명, min(최솟값을 알고 싶은 필드명) from 테이블명
group by 범주가 담긴 필드명;

select 범주가 담긴 필드명, max(최댓값을 알고 싶은 필드명) from 테이블명
group by 범주가 담긴 필드명;

select 범주가 담긴 필드명, avg(평균값을 알고 싶은 필드명) from 테이블명
group by 범주가 담긴 필드명;

 

*반올림을 하고 싶다면 : round(avg(평균값을 알고 싶은 필드명), 반올림 자릿수n)

-- 둘째자리에서 반올림
select 범주가 담긴 필드명, round(avg(평균값을 알고 싶은 필드명),2) from 테이블명
group by 범주가 담긴 필드명;

 

*동일한 범주의 합계 구하기 : sum(필드명)

select 범주가 담긴 필드명, sum(합계를 알고 싶은 필드명) from 테이블명
group by 범주가 담긴 필드명;

 

2. 정렬해주는 Order by

- 문자열, 시간순으로도 정렬 가능

정렬되지 않은 테이블

 

- 결과의 개수 오름차순으로 정렬해보기

select name, count(*) from users
group by name
order by count(*);
-- order by count(*); desc -- 내림차순 정렬
-- 아까 코드에 order by count(*) 만 추가. 갯수 (count(*) 값)을 기준으로 정렬해달라는 뜻.

오름차순 정렬

 

- Order by 제대로 알아보기

SQL 쿼리가 실행되는 순서 from → group by → select → order by

1. from users: users 테이블 데이터 전체를 가져온다.

2. group by name: users 테이블 데이터에서 같은 name을 갖는 데이터를 합쳐준다.

3. select name, count(*): name에 따라 합쳐진 데이터가 각각 몇 개가 합쳐진 것인지 세어준다.

    예) 이**, 이**, 김**, 김**, 박** 이렇게 데이터가 있었다면, 이는 2개, 김은 2개, 박**은 1개

4. order by count(*): 합쳐진 데이터의 개수에 따라 오름차순으로 정렬해준다.

 

3. Where와 Group by, Order by 함께 사용해보기

-- 예) 웹개발 종합반의 결제수단별 주문건수 세어보기
select payment_method, count(*) from orders
where course_title = "웹개발 종합반"
group by payment_method
order by count(*);

 

위 쿼리가 실행되는 순서: from → where → group by → select

1. from orders: users 테이블 데이터 전체를 가져온다.

2. where course_title = "웹개발 종합반": 웹개발 종합반 데이터만 남겨준다.

3. group by payment_method: 같은 payment_method을 갖는 데이터를 합쳐준다.

4. select payment_method, count(*): payment_method에 따라 합쳐진 데이터가 각각 몇 개가 합쳐진 것인지 세어준다.

    예) CARD, CARD, kakaopay 이렇게 데이터가 있었다면, CARD는 2개, kakaopay는 1개

만약 order by가 추가된다면? order by는 맨 나중에 실행(결과물을 정렬해주는 것이기 때문)

 

4.  별칭 기능: Alias

쿼리가 점점 길어지면서 종종 헷갈리는 일이 생길 수 있음. 그래서 SQL은 Alias라는 별칭 기능을 지원

-- 예) orders o < 약어를 통해 o.course_title 로 표기 가능
select * from orders o
where o.course_title = '앱개발 종합반'

select payment_method, count(*) as cnt from orders o --  테이블명 뒤에 as를 붙여서 별칭을 추가하는 것도 가능
where o.course_title = '앱개발 종합반'
group by payment_method

'Database > SQL' 카테고리의 다른 글

SQL : Subquery, With, 문자열, Case  (1) 2023.11.26
SQL : Join, Union  (0) 2023.11.26
SQL : 데이터 베이스의 기초 개념, select, where  (1) 2023.11.26