<usertbl>
<buytbl>
기본적 쿼리 문의 순서이다.
select
from
WHERE
group by
having
order by
1. 1) 집계함수, group by - 합계 sum
userid별로 구매한 건수를 userid오름차순으로 출력하라ㅇ
1
2
3
4
5
|
-- sum() 집계함수, 집계함수가 나오면 무조건 group by가 나와야한다.
select userid, sum(amount)
from buytbl
group by userid -- userid별로 나타내겠다는 말
order by userid; -- userid 별로 asc로 출력하겠다는 말(오름차순)
|
cs |
2)평균 avg
사용자 아이디 별 평균 구매 건수를 내림 차순으로 출력하라
1
2
3
4
5
|
select userid as '사용자 아이디' , avg(amount) as '평균 구매 건수'
from buytbl
group by userid
order by avg(amount) desc;
|
cs |
3) 최대 최소 max min
usertbl에서 최대 키와 최소 키, 이름을 출력해라
1
2
3
4
5
6
|
select name, height
from usertbl
where height = ( select max(height)
from usertbl)
or height = ( select min(height)
from usertbl);
|
cs |
4) 집계함수와 having절
총 구매액이 1000 초과인 사람의 사용자 아이디와 총 구매액을
사용자 아이디 별로 구하는데 총 구매액 내림차순으로 출력하라
1
2
3
4
5
6
7
8
9
10
|
-- having 절
-- 총 구매액이 1000 만원 이상만 보고 싶다면 어떻게 해야할까
-- 조건이니 where절에 넣으면 될 것이라 생각하지만 where절에는 집계함수를 쓸 수 없다.
-- having절도 역시 조건절이다. 단, 그룹함수를 가지고 조건을 줄 수 있다.
select userid as '사용자 아이디' , sum(price * amount) as '총 구매액'
from buytbl
group by userid
having sum(price * amount)>1000
order by sum(price * amount) desc;
-- from -> where -> group by -> having -> select -> order by 순으로 실행됨
|
cs |
집계함수에서 조건을 걸고 싶으면 having절을 사용해야함
5) rollup
groupname별로 소합계를 내준다.
1
2
3
4
5
|
select groupname, sum(price* amount)
from buytbl
group by groupname
with rollup;
|
cs |
groupname이 null인 총 구매액 180,
서적이 groupname인 총 구매액 120... 가다가
마지막에 전체 총 구매액을 내줌
2. 알리아스 as
1
2
3
4
5
|
select userid as '사용자 아이디', sum(amount) as '구매한 건수'
from buytbl
group by userid
order by userid;
|
cs |
as를 이용해서 컬럼에 이름을 붙여준다.
728x90
'DataBase > MySQL' 카테고리의 다른 글
[MySQL] 데이터 제어어 DCL: 권한부여, 권한 삭제 grant, revoke (0) | 2020.11.25 |
---|---|
[MySQL] ORDER BY / 정렬/ 내림차순 정렬/ 오름차순 정렬 (0) | 2020.11.24 |
[MySQL] 서브쿼리/ any, some , all / 둘 중 하나만 만족, 둘 다 만족 (0) | 2020.11.24 |
[MySQL] select , where절 조건 / in, between, and , or, like, is null (0) | 2020.11.24 |
[MySQL] 데이터 조작어(DML): INSERT, UPDATE, DELETE / 데이터 삽입, 데이터 갱신, 데이터 삭제 (0) | 2020.11.24 |