본문 바로가기

분류 전체보기

(143)
SQL 데이터 분석함수 - 등급 출력 Ntile( 숫자) over( order by ~ desc/asc ) 데이터 분석함수는 그룹함수가 아닌 별도의 함수이다. NTILE(등급 출력하기) → ntile ( 원하는 등급 갯수) over ( order by 컬럼 desc / asc) as 등급 예제 : 직업이 'ANALYST, MANAGER, CLERK 인 사원들의 이름과 직업과 월급과 등급을 출력하는데 등급을 4등급으로 나눠서 출력하세요 select ename, job, sal, ntile(4) over( order by sal desc) 등급 from emp where job in ('ANALYST','MANAGER','CLERK'); 0
SQL 데이터 분석함수 - 순위출력 Rank () over ( partition by /order by ~ desc/asc), Dense_Rank () 데이터 분석함수 → 그룹함수 가 아닌 별도의 함수 이다. RANK (순위) (RANK () OVER (partition by order by desc or asc ) → OVER = 확장하다. →즉 OVER 다음에 나오는 괄호안의 내용으로 확장해서 RANK를 출력하겠다는 뜻. 예제 : 이름과 월급을 출력하고 월급이 높은 순으로 순위를 출력 select ename, sal, rank() over (order by sal desc) as 순위 from emp; → 설명 () 의 내용? 괄호 안의 내용을 확장해서 순위를 출력해라. 예제 : 직업이 애널리스트, 매니저 인 사원들의 이름 직업 월급과 월급에 대한 순위를 출력 select ename, job, sal, rank() over (order by sal ..
SQL 다중행 함수 - 그룹함수 (Count) 건수 COUNT (건수를 세는 함수) count 또한 그룹함수이기때문에 null 값을 무시하고 계산해 준다. → null 값이 없는 컬럼을 기준으로 count 를 해주어야한다. → 만약 null값이 있는 컬럼으로 count 하게 되면 누락 된다. null 값을 세지 않기 때문. 그래서 제일 확실한 방법은 모든 컬럼 (*) 을 선택하면 확실하다. select count(*) from emp; 문제 : 직업이 세일즈 맨인 사원들이 몇명? select count(*) from emp where job = 'SALESMAN'; → 웬만하면 * 을 쓰자!! 문제 : 우리반 통신사가 lg 인 학생들은 전부 몇명인지 카운트 출력 select count(*) from emp14 where lower(telecom) = 'l..
SQL 다중행 함수 - 그룹함수 (SUM) 토탈값 SUM (토탈값) GROUP 함수의 특징 : null 값을 무시한다. 예제 : 커미션의 토탈값을 출력 select sum(comm) from emp; or select sum(nvl (comm,0)) from emp; → 두개의 sql 중 속도가 빠른 sql 은 무엇인가? 첫번째 sql 이 속도가 더 빠르다. NULL 값을 무시하고 계산하기때문에 식이 줄어든다. 두번째 sql 은 null 값이 0으로 치환되어 sum 연산에 포함되어있다. 따라서 만약 데이터가 1억개 넘는다고 하면 0 을 더하는 식이 있기 때문에 연산시간이 너무 늘어나게 된다. 문제 : 직업 , 직업별 토탈월급을 출력 , 직업별토탈월급이 높은 순으로 출력 select job, sum(sal) from emp group by job orde..
SQL 다중행 함수 - 그룹함수 (AVG) 평균값 구하기 AVG (평균 출력) → 만약 출력했을때 소수점이 너무많아서 안나오게 하고싶다면 round 둘러준다. 특징 NULL 값이 있을 경우 avg 는 계산할때 NULL 값을 빼고 계산한다. → 그룹함수의 특징이다. 예제 : 우리반 테이블에서 평균 나이를 출력하세요 select round(avg(age),1) from emp14; 문제 : 직업, 직업별 평균월급 출력 select job, round( avg(sal)) from emp group by job; 문제 : 커미션을 다 더해서(null 포함) 전체 사원수로 나누게 하려면 ? select avg(nvl(comm,0)) from emp; 설명 : null 값을 0으로 치환하여 평균값을 출력한다. 문제 : class_type , class_type별 평균나이..
SQL 다중행 함수 - 그룹함수 (MIN) 최소값 MIN (최소값 출력) min 만 출력한다면 GROUp by 절은 필요없다. 하지만 다른 컬럼과 함께 Min 의 값을 도출하려면 GROUP by 절을 꼭 사용해주어야 오류 없이 출력된다. 예제 : 부서번호가 20번인 사원들의 최소월급 select min(sal) from emp where deptno = 20 ; 문제 : 직업, 직업별 최소월급 출력 , 직업을 abcd 순으로 출력 select job, min(sal) from emp group by job order by job asc; 문제 : 부서번호, 부서번호별 최소 월급을 출력 부서번호별 최소월급이 낮은것부터출력 select deptno, min(sal) from emp group by deptno order by 2 asc; 문제 : 입사년도(..
SQL 다중행 함수 - 그룹함수 MAX (최대값) 다중행 함수??? —> 함수 —> 함수 —> —> 함수 여러개의 함수가 입력되어서 하나의 행으로 출력 되어지는 함수 → 그룹함수는 NULL 값을 무시합니다. 그룹함수를 사용하려면 GRoup by 절을 사용해야한다. MAX (최대값 출력하기) 예제 : 사원 테이블에서 최대 월급만 출력 select max(sal) from emp; 문제: 직업이 세일즈 맨 인 사원들 중에 최대월급 select max(sal) from emp where job = 'SALESMAN'; 옆에 세일즈맨이 뜨도록 select job, max(sal) from emp where job = 'SALESMAN'; → 이렇게 하면 에러가 난다 이유는?단일그룹의 그룹함수가 아니다! 마지막 실행이 select 절이 마지막 이기때문에 wher..
SQL 단일행 함수 - 일반함수 ( case when ~ then~ else~end as ) 파생컬럼생성 case when~ then~ else~end as절 (if 문 ) 부등호 ,= 비교가 모두 가능하다 decode 는 = 부등호 비교만 가능했음! 예제 : 이름, 월급, 보너스를 출력하는데 월급이 3000 이상이면 보너스를 9000을 출력하고 월급이 3000보다 작으면 0을 출력하시오 select ename, sal, case when sal ≥3000 then 9000 else 0 end as 보너스 from emp; 문제 : 직업이 세일즈맨, 어널리스트인 사원들의 이름 직업 월급 보너스를 출력 월급이 3000 이상이면 보너스를 500, 2000 이상이면 보너스를 300 월급이 1000 이상이면 보너스 200 나머지는 0을 출력한다. select ename, job, sal, case when sal ..