-- order by 오름차순 desc입력시 내림차순.
select ename, sal
from emp
order by sal

select job, avg(sal) as [avgsal]
from EMP
group by JOB
order by avgsal desc

--top 상위 5개만 보여줌.
select top 5 ename, SAL
from emp
order by SAL desc

select top 30 percent ename, SAL
from EMP
order by SAL desc

--with ties 동률. 같은값이 있는경우에는 같이 표시.
select top 2 with ties ename, SAL
from EMP
order by sal desc


--group by 이후 처리가 필요할경우 having으로 처리하여줌.
select job , AVG(sal) as [평균연봉]
from emp
where job != 'clerk'
group by job
having avg(SAL) >= 3000
order by avg(sal)

--with rollup 시 이전 값에대한 전체값을 리턴.
select job, deptno, avg(sal)
from emp
group by deptno,job with rollup


select deptno, job, sal
from emp
order by DEPTNO desc
compute avg(sal) by deptno

'개발 > SQL' 카테고리의 다른 글

MS-SQL 조건문  (0) 2011.05.18
MS-SQL 기본문제 9문  (0) 2011.05.18
MS-SQL 기초문제  (0) 2011.05.18
MS-SQL 문법 [ DATE ]  (0) 2011.05.18
MS-SQL 숫자,텍스트,문법 [ in , like , Math ]  (0) 2011.05.18

--1. 사원테이블에서 부서별 최대 월급을 출력하라.

select deptno,max(sal) as [최대월급]
from emp
group by deptno

--2. 사원테이블에서 직위별 최소 월급을 구하되 직위가
-- CLERK인 것만 출력하라.

select job,min(sal) as [최소월급]
from emp
where job = 'clerk'
group by job

--3. 커미션이 책정된 사원은 모두 몇 명인가?

select count(comm)
from emp

--4. 직위가 'SALESMAN'이고 월급이 1000이상인 사원의
-- 이름과 월급을 출력하라.

select ename,sal
from emp
where job = 'SALESMAN' and SAL >= 1000

--5. 부서별 평균월급을 출력하되, 평균월급이 2000보다
-- 큰 부서의 부서번호와 평균월급을 출력하라.

select DEPTNO ,avg(sal) as [평균월급]
from emp
group by DEPTNO
having avg(SAL) >= 2000

 

--6. 사원테이블에서 커미션을 가장 많이 받는 사원 2명을
-- 출력하되 랭킹이 중복될 경우 동률처리를 하여 출력하라.

select top 2 with ties ename, comm
from emp
order by comm desc

--7. 직위가 MANAGER인 사원을 뽑는데 월급이 높은 사람
-- 순으로 이름, 직위, 월급을 출력하라.

select ename,job,sal
from emp
where job = 'manager'
order by sal desc


--8. 각 직위별로 총월급을 출력하되 월급이 낮은 순으로
-- 출력하라.

select job, SUM(sal) as [합계]
from emp
group by job
order by sum(sal)

--9. 직위별 총월급을 출력하되, 직위가 'MANAGER'인
-- 사원들은 제외하라. 그리고 그 총월급이 5000보다
-- 큰 직위와 총월급만 출력하라.

select job, sum(SAL) as [합계]
from emp
where job != 'manager'
group by job
having sum(SAL) > 5000

--10. 직위별 최대월급을 출력하되, 직위가 'CLERK'인
-- 사원들은 제외하라. 그리고 그 최대월급이 2000 이상인
-- 직위와 최대월급을 최대 월급이 높은 순으로 정렬하여
-- 출력하라.

select job,max(sal) as[최대월급]
from emp
where job != 'clerk'
group by job
 having max(sal) > 2000
order by max(sal) desc

--11. WITH ROLLUP  구문을 이용하여 직위별 사원의 이름과
-- 월급, 그리고 직위별 월급의 합을 구하라.

select sal, job, ename , sum(sal)
from emp
group by job,ename,sal with rollup


select GETDATE()+10 --10일후로 입력.
dateadd
/*년 yy
월 mm
일 dd
시 hh
분 mi
초 ss,
dy(day of year), dw(day of week), qq
*/
select DATEADD(yy,5,GETDATE());
select DATEDIFF(dd,'2011-12-31',GETDATE()); -- 년도끼리 연산.

select DATENAME(DW,GETDATE()); --문자형반환. /목요일
select DATEPART(DW,GETDATE()); --숫자형 반환 /5일

select YEAR(GETDATE()); --GETDATE에서 YEAR값리턴.
select MONTH(GETDATE()); --GETDATE에서 MONTH값리턴.
select DAY(GETDATE()); -- GETDATE에서 DAY값리턴.

--정수형 문자형을 합치는 방법.
select ename, empno --ename은 문자형 empno가 숫자형일때
from emp;

--CONVERT로 문자형으로 형변환.
select ename + CONVERT(varchar(10), empno)
from emp

--CAST로 문자형으로 형변환.
select ename + CAST(empno as VARCHAR(10))
from emp

--년월일 표기식 변경.
select convert(varchar(20),GETDATE(),101); -- 미국표기식 년월일.
select convert(varchar(20),GETDATE(),102); -- ansi식 년월일.
select convert(varchar(20),GETDATE(),112); -- ios식 년월일


--집계함수는 null을 배제하고 사용한다.
/*
평균 avg
최대값 max
최소값 min
합계 sum
  count
*/

--empno안에 총 몇가지 값이 있는지 갯수 체크.
select count(isnull(empno,0))
from emp

select SUM(comm) as [합계]
from emp

select AVG(isnull(comm,0)) as [평균]
from emp

--clerk를 제외
select job, AVG(sal) as [합 계]
from emp
where job != 'clerk'
group by job

select MAX(SAL)
from emp

select min(sal)
from emp

select job, deptno,avg(sal)
from emp
group by job

+ Recent posts