※ 이 글은 오지영 강사님의 <업무에 바로 쓰는 SQL 활용실습>의 강의내용을 바탕으로 작성하였습니다.
1. 합계(SUM), 평균(AVG), 최대값(MAX), 최소값(MIN) 구하기
SELECT SUM(sal),AVG(sal), MAX(sal)
FROM emp ;
SELECT SUM(sal), AVG(sal), MAX(sal)
FROM emp
WHERE ename like '%A%' ;
SELECT SUM(sal), AVG(sal), MAX(sal)
FROM emp
WHERE deptno = 20 ;
2. GROUP BY 특정 컬럼의 값을 기준으로 그룹을 나눈 후 그룹별로 작업 수행에 대한 결과를 출력
SELECT SUM(sal), AVG(sal), MAX(sal), DEPTNO
FROM emp
GROUP BY deptno ;
SELECT SUM(sal), AVG(sal), MAX(sal) DEPTNO
FROM emp
WHERE avg(sal) > 2000
GROUP BY deptno ;
연습문제
1. player_t 선수들의 각 팀의 id와 팀 평균키, 팀 평균몸무게, 팀원 수가 얼마인지 조회하기. 평균키가 큰 팀 순서대로
SELECT team_id, AVG(height), AVG(weight), COUNT(*)
FROM player_t
GROUP BY team_id
ORDER BY AVG(height) DESC ;
2.소속선수들의 평균키가 180보다 큰 포지션 조회하기
SELECT position
FROM player_t
GROUP BY position
HAVING AVG(height) > 180;
3.포지션이 DF인 선수들이 각팀에 몇 명씩 있는지 조회하기
SELECT team_id, COUNT(player_name)
FROM player_t
WHERE position ='DF'
GROUP BY team_id ;
4. 같은 이름으로 2명 이상 등록되어 있는 동명이인인 선수들 이름만 조회하기
SELECT player_name, COUNT(*)
FROM player_t
GROUP BY player_name
HAVING COUNT(*) >= 2 ;
5. player_t선수들의 이름글자수 기준 몇 명 있는지 조회하기. 한 글자인 선수가 몇 명 두 글자인 선수가 몇 명인지
SELECT LENGTH(player_name), COUNT(*)
FROM player_t
GROUP BY player_name;
SELECT LENGTH(player_name), COUNT(*)
FROM player_t
GROUP BY length(player_name) ;
6. 생일이 등록된 선수들을 대상으로 월별 생일자수 조회하기
※ 날짜 정보중 일부요소만 추출해서 사용시
1) TO_CHAR(날짜,'추출정보')
SELECT TO_CHAR( sysdate, 'day') FROM dual;
SELECT TO_CHAR( sysdate, 'year') FROM dual;
SELECT TO_CHAR( sysdate,'yyyymm day') FROM dual;
2) EXTRACT (추출정보 from 날짜)
SELECT EXTRACT(day from sysdate) FROM dual ;
month
year
SELECT EXTRACT (month from birth), COUNT(*)
FROM player_t
WHERE birth is NOT null
GROUP BY EXTRACT (month from birth);
7. 생일이 등록된 선수들의 이름, 생일, 연령대 조회하기
선수이름, 생일, 만 나이 조회 ==> 나이는 오늘 기준 몇 개월 살았는지 구해서 12로 나눔.
SELECT player_name, birth, MONTHS_BETWEEN(sysdate,birth)/12 AS 나이,
TRUNC(MONTHS_BETWEEN(sysdate,birth)/12,-1) 연령대
FROM player_t
WHERE birth IS NOT NULL;
8. 생일이 등록된 선수들 대상으로 연령대별 소속인원이 몇 명인지 조회하기
SELECT TRUNC(months_between(sysdate,birth)/12,-1) 연령대, COUNT(*), AVG(height)
FROM player_t
WHERE birth is not null
GROUP BY TRUNC(MONTHS_BETWEEN(sysdate,birth)/12,-1) ;
'프로그래밍 > Database & SQL' 카테고리의 다른 글
[Oracle | 오라클] 테이블 정보 조회하기 (0) | 2015.10.19 |
---|---|
[Oracle | 오라클] 함수(Function) (0) | 2015.10.17 |
[Oracle | 오라클] 단일행 함수 - 5. 기타함수 (0) | 2015.08.17 |
[Oracle | 오라클] 단일행 함수 - 4. 변환함수 (0) | 2015.08.17 |
[Oracle | 오라클] 단일행 함수 - 3. 날짜함수 (0) | 2015.08.13 |