반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- sleep()메소드
- 상관 서브 쿼리
- ThreadGroup()
- 메모리스트림
- Daemon()
- first-child
- StringReader
- StringWriter
- 스레드그룸
- include 지시자
- 표현 언어
- 동기화
- 리눅스세팅
- Linux셋팅
- 리눅스셋팅
- String char[] 형변환
- InputDialog
- interrupt()
- include액션태그
- isinterrupted()
- 아이디중복
- MemoryStream
- char[] String 형변환
- 상관서브쿼리
- include지시자
- Linux세팅
- first-of-child
- ID중복
- ObjectInputStream
- interrupted()
Archives
- Today
- Total
다연이네
[days05] 집계함수 본문
반응형
집계함수는 지가 알아서 null을 빼고 계산한다.
ORA-00937: not a single-group group function
이거 오류메시지 꼭 알고있자 (집계함수는 일반 컬럼과 같이 못쓴다는 의미)
1. count()
- select한 행의 개수 반환
- count (컬럼명)
ex) emp 테이블에 사원수를 파악
select count(*) --null을 포함한 모든 행의 수
,count(empno)
,count(ename)
,count(comm) --4 (나머지8개는 null)
from emp;
2. avg()
select sum(sal)/count(sal), avg(sal)
from emp;
sum()/count() == avg()인 걸 보니 avg()의 내부구조가 sum()/count()와 같구나를 알 수 있다.
만일
select avg(comm) --550
from emp;
아래 코딩을 출력할때 comm이 null인 사람이 있으면 자기가 알아서 그 사람 빼고 계산한다.
문제) 가장 급여를 많이 받는 사원의 부서번호, 이름, 급여 정보 출력
select deptno, ename, sal
from emp
where sal = (select max(sal) from emp);
where문 안에 있는 쿼리는'서브쿼리'로, max는 바로 where에 못쓰기 때문에 본문처럼 사용해야 한다.
3. Top N - rownum
ex 1) 탑5가져오기
select rownum, deptno,ename, sal
from (
select *
from emp
order by sal desc
)
where rownum<=5; --탑5가져오기
--where rownum<=3 and rownum<=5; --사이 범위값은 안된다 (기억해두기)
ex 2) 총 사원수 출력 + 10번/20/30/40 각 부서의 사원수
select
count(decode(deptno, 10, 'O')) A --10번 부서는 O, 나머지는 null 들어감
,count(decode(deptno, 20, 'O'))B --나머지도 마찬가지
,count(decode(deptno, 30, 'O'))C
,count(decode(deptno, 40, 'O'))D
from emp;
ex 2-2) 인사테이블 남녀 찾기
select
count(decode(mod(substr(ssn,8,1),2),1, 'O'))
,count(decode(mod(substr(ssn,8,1),2),0, 'O'))
from insa;
ex 3) 각 부서별 사원수 구하기 - group by
select deptno
,count(*)
,sum(sal)
,trunc(avg(sal))
from emp
group by deptno
order by deptno desc;
ex 3-2)
select o.deptno, o.ename, o.sal --좋은 코딩은 절대 아님
,(select sum(sal) from emp)총급여액
,trunc((select avg(sal) from emp))전체평균급여액
,(select sum(sal) from emp i where i.deptno = o.deptno)부서별급여합--emp (테이블명)에 alias i
--얘를 상관서브쿼리 라고 한다. 밖의 쿼리와 관계가 있기 때문에
,trunc((select avg(sal) from emp i where i.deptno = o.deptno))부서별평균급여
from emp o; --alias o
emp i와 emp o는 다르다.
안에있는 쿼리를 '상관서브쿼리'라고 한다. (밖의 쿼리와 관계가 있기 때문)
반응형
'Oracle' 카테고리의 다른 글
[days07] SQL - RANK, ROLL UP (0) | 2020.11.06 |
---|---|
[days06] SQL function 이어서 (0) | 2020.11.05 |
[days05] SQL function2 (0) | 2020.11.04 |
[days04] SQL Operation, Function 예제 (0) | 2020.11.03 |
[days04] SQL synonym (0) | 2020.11.03 |
Comments