일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- JS value속성
- CSS기초
- JS 타이머기능
- JS 스코프
- JS setTimeout
- JS 함수
- JS prompt
- JS preventDefault
- JS localStorage
- JS null undefined
- JS form action
- JS form
- HTML기초
- JS appendChild
- JS 숫자
- JS clearInterval
- JS 데이터타입
- JS append
- JS 형변환
- git 협업셋팅
- JS 연산
- JS typeof연산자
- JS setInterval
- JS classList
- JS redirection
- JS 기초
- JS 삼항연산
- JS 화살표함수
- CSS속성정리
- js 변수
공부기록용
SQL 2주차 본문
Group by
범주의 통계를 내주는 Group by
select * from users
group by name;
▼
select name, count(*) from users
group by name;
> from users: users 테이블 데이터 전체를 가져옵니다.
>> group by name: users 테이블 데이터에서 같은 name을 갖는 데이터를 합쳐줍니다.
>>> select name, count(*): name에 따라 합쳐진 데이터가 각각 몇 개가 합쳐진 것인지 세어줍니다.
동일한 범주의 개수 구하기
동일한 범주의 갯수는 count(*)를 사용한다.
select 범주별로 세어주고 싶은 필드명, count(*) from 테이블명
group by 범주별로 세어주고 싶은 필드명;
▼
주차별 다짐의 갯수 구하
select week, count(*) from checkins
group by WEEK
동일한 범주에서의 최솟값 구하기
동일한 범주 특정 필드의 최솟값은 min(필드명)을 사용한다.
select * from checkins
group by WEEK;
▼
select week, min(likes) FROM checkins
group by WEEK;
> 주차별로 최소로 받은 라이크 구하기
> 범주가 담긴 필드명은 week, 최솟값을 알고 싶은 필드명은 likes
동일한 범주에서의 최댓값 구하기
동일한 범주 특정 필드의 최댓값은 max(필드명)을 사용한다.
select * from checkins
group by WEEK;
▼
select week, max(likes) FROM checkins
group by WEEK;
> 주차별로 최대로 받은 라이크 수 구하기
> 범주가 담긴 필드명은 week, 최대값을 알고 싶은 필드명은 likes
동일한 범주의 평균 구하기
동일한 범주 특정 필드의 평균값은 avg(필드명)을 사용한다.
select * from checkins
group by WEEK;
▼
select week, avg(likes) FROM checkins
group by WEEK;
> 범주가 담긴 필드명은 week, 평균값을 알고 싶은 필드명은 likes
> 평균값이라 소수 점으로 떨어진다면, avg(평균값을 알고 싶은 필드명)을 round로 감싸고_round(avg( )), 숫자를 써서 나타내고 싶은 소숫점 자리를 넣어준다. (0으로 하면 그냥 반올림이 되는것)
select week, round(avg(likes), 2) FROM checkins
group by WEEK;
동일한 범주의 합계 구하기
동일한 범주 특정 필드의 합계는 sum(필드명)을 사용한다.
select * from checkins
group by WEEK;
▼
select week, sum(likes) FROM checkins
group by WEEK;
> 범주가 담긴 필드명은 week, 합계를 알고 싶은 필드명은 likes
Order by
깔끔한 정렬이 필요할 때 사용하는 Order by
select name, count(*) from users
group by name
select name, count(*) from users
group by name
order by count(*)
> 정렬하고 싶은 기준은 써주면 된다. order by 정렬의 기준이 될 필드명
> 기본적으로 오름차순이며, desc를 써주면 내림차순으로 정렬할 수 있다.
※ 에러가 안 나는 쿼리를 작성하기 위해서는 SQL 쿼리가 실행되는 순서를 아는 것이 중요
select name, count(*) from users
group by name
order by count(*);
위 쿼리가 실행되는 순서: from → group by → select → order by
Where와 Group by, Order by 함께 사용하기
Where절로 조건이 하나 추가되고, 그 이후에 Group by, Order by가 실행되는 것이다.
Q1. 웹개발 종합반의 결제수단별 주문건수 세어보기
select payment_method, count(*) from orders
WHERE course_title = "웹개발 종합반"
GROUP by payment_method
> orders 테이블에서 주문 데이터를 읽어오고
>> 웹개발 종합반 데이터만 남기고
>>> 결제수단(범주) 별로 그룹화하고
>>>> 결제수단별 주문건수를 세어준다!
>>>>> 순서를 미리 정립해두면 편한 것 같다
select payment_method, count(*) from orders
WHERE course_title = "웹개발 종합반"
GROUP by payment_method
order by count(*)
>>>>>>> 만약 order by가 추가된다면? order by는 맨 나중에 실행됩니다! (결과물을 정렬해주는 것이기 때문)
Order by 예제1. 문자열을 기준으로 정렬해보기
select * from users
order by email;
select * from users
order by name DESC
Order by 예제2. 시간을 기준으로 정렬해보기
select * from users
order by created_at desc;
> 최근 데이터부터 보고싶을 때, 유용
Group by 예제1. 앱개발 종합반의 결제수단별 주문건수 세어보기
select payment_method, count(*) from orders
WHERE course_title = "앱개발 종합반"
group by payment_method
Group by 예제2. Gmail 을 사용하는 성씨별 회원수 세어보기
select name, count(*) from users
WHERE email like "%gmail.com"
group by name
Group by 예제3. course_id별 '오늘의 다짐'에 달린 평균 like 개수 구해보기
select course_id, avg(likes) from checkins
group by course_id
> 평균을 구하고 싶은걸 avg(이 안에)
Alias
쿼리가 점점 길어지면서 종종 헷갈리는 일이 생길 수 있는데 SQL은 Alias라는 별칭 기능을 지원합니다.
select * from orders o
WHERE o.course_title = "앱개발 종합반"
> orders를 o라는 별칭으로 지정했고
> o.course_title는 orders 테이블에 있는 course_title을 의미한다.
select payment_method, count(*) from orders o
WHERE o.course_title = "앱개발 종합반"
group by payment_method
▼
select payment_method, count(*) as cnt from orders o
WHERE o.course_title = "앱개발 종합반"
group by payment_method
숙제. 네이버 이메일을 사용하여 앱개발 종합반을 신청한 주문의 결제수단별 주문건수 세어보기
select payment_method, count(*) from orders
WHERE email like '%naver.com'
group by payment_method
'📚강의록📚 > 스파르타)SQL' 카테고리의 다른 글
SQL 문제풀이(8~18) (0) | 2023.06.03 |
---|---|
SQL 3주차 (0) | 2023.06.02 |
SQL 문제풀이(1~7) (0) | 2023.06.01 |
SQL 1주차 (0) | 2023.06.01 |