-
[MySQL] 스파르타 코딩클럽 "엑셀보다 쉬운 SQL" 2주차DataBase/RDBMS 2022. 9. 4. 19:32
이번주는 SQL 쿼리를 이용해 보고싶은 raw data를 의미를 갖는 '정보'로 변환시키는 법을 익혔다. 그 방법은 바로 '통계'를 내고 '정렬'을 하는 것이다. 통계를 내기 위해서는 GROUP BY, 정렬을 하기 위해서는 ORDER BY를 사용한다.
1. GROUP BY
: GROUP BY를 기반으로 '개수', '최대값', '최소값', '합계', '평균값'등을 구해 통계를 낼 수 있다.
SELECT 필드명, method(*) FROM 테이블명
GROUP BY 필드명;
: 특정 필드별로 통계치를 보겠다!
💡 쿼리가 실행되는 순서는 FROM → GROUP BY → SELECT라는 것을 기억!
💡 어떤 기준으로 통계를 냈는지 확인할 수 있도록 SELECT로 출력할 내용에 통계치를 낼 method를
지정하는 것 뿐만 아니라 GROUP BY로 묶은 필드명을 포함시키는 것이 좋다!
(포함시키지 않는다고 해서 오류가 나지는 않음)
1-1. 개수
: 'count' 사용
SELECT 범주별로 세고싶은 필드명, count(*) as 별칭 FROM 테이블명
GROUP BY 범주별로 세고싶은 필드명;
※ Alias 기능을 통해 보여줄 필드의 별칭을 지정할 수 있다!
- 사용법: 보여줄 필드 뒤에 'as 별칭'을 붙여준다.
- EX: count(*)의 별칭을 cnt로 보여주고 싶다면 " count(*) as cnt "를 활용하면 된다.EX) SELECT name, count(*) as cnt FROM users
GROUP BY name; # 성씨별 회원수(필드명은 cnt로 지정)를 구함
1-2. 최대값
: 'max' 사용
SELECT 통계치의 범주가 될 필드명, max(최대값을 알고싶은 필드명) FROM 테이블명
GROUP BY 통계치의 범주가 될 필드명;
EX) SELECT week, max(likes) FROM checkins
GROUP BY week; # 주차별 좋아요 수의 최대값
1-3. 최소값
: 'min' 사용
SELECT 통계치의 범주가 될 필드명, min(최소값을 알고싶은 필드명) FROM 테이블명
GROUP BY 통계치의 범주가 될 필드명;
EX) SELECT week, min(likes) FROM checkins
GROUP BY week; # 주차별 좋아요 수의 최소값
1-4. 합계
: 'sum' 사용
SELECT 통계치의 범주가 될 필드명, sum(합계를 알고싶은 필드명) FROM 테이블명
GROUP BY 통계치의 범주가 될 필드명;
EX) SELECT week, sum(likes) FROM checkins
GROUP BY week; # 주차별 좋아요 수의 합계
1-5. 평균값
: 'avg' 사용('round'로 한번 더 감싸 출력할 소수점 자리수를 지정할 수 있음)
SELECT 통계치의 범주가 될 필드명, round(avg(평균값을 알고싶은 필드명), 출력할 소수점 자리수) FROM 테이블명
GROUP BY 통계치의 범주가 될 필드명;
EX) SELECT week, avg(likes) FROM users
GROUP BY week; # 주차별 좋아요 수의 평균값
EX) SELECT week, round(avg(likes), 2) FROM users
GROUP BY week; # 주차별 좋아요 수의 평균값을 소수점 둘째자리까지 나타냄
2. ORDER BY
SELECT * FROM 테이블명
ORDER BY 필드명;
💡 정렬 기준의 default는 asc(오름차순))
EX) SELECT * FROM checkins
ORDER BY likes; # 좋아요를 받은 순서대로 checkins 테이블의 모든 필드를 출력
EX) SELECT * FROM checkins
ORDER BY likes desc; # 좋아요를 많이 받은 순서대로 checkins 테이블의 모든 필드를 출력
3. GROUP BY + ORDER BY
SELECT 필드명, method(*) FROM 테이블명
GROUP BY 필드명
ORDER BY method(*);
💡 쿼리가 실행되는 순서는 FROM → GROUP BY → SELECT → ORDER BY!
EX) SELECT name, count(*) FROM users
GROUP BY name
ORDER BY count(*); # 성씨별 회원수를 오름차순으로 정렬
4. WHERE절 + GROUP BY + ORDER BY
SELECT 필드명, method(*) FROM 테이블명
WHERE 조건
GROUP BY 필드명
ORDER BY method(*);
💡 쿼리가 실행되는 순서는 FROM → WHERE → GROUP BY → SELECT → ORDER BY!
EX) SELECT name, count(*) FROM users
WHERE email like '%gmail%'
GROUP BY name
ORDER BY count(*) desc; # gmail을 사용하는 회원 중 성씨별 회원수를 내림차순으로 정렬
'DataBase > RDBMS' 카테고리의 다른 글
[MySQL] 스파르타 코딩클럽 "엑셀보다 쉬운 SQL" 3주차 (0) 2022.09.18 [MySQL] 스파르타 코딩클럽 "엑셀보다 쉬운 SQL" 1주차 (0) 2022.08.28