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) = 'lg';
문제 : 직업, 직업별 인원수 출력 , 세일즈맨 제외
select job, count(*)
from emp
where job ≠ 'SALESMAN'
group by job ;
문제 : 위결과를 다시 출력하는데 직업별 인원수가 높은것부터
select job, count(*)
from emp
where job != 'SALESMAN'
group by job
order by 2 desc;
문제 : 위의결과 다시 출력 직업별 인원수가 2명 이상인것 출력
select job, count(*)
from emp
where job != 'SALESMAN'
group by job
having count(*) >= 2
order by 2 desc;
문제 : 우리반에서 나이, 나이별 인원수 출력 나이별 인원수가 높은것부터 출력
select age, count(*)
from emp14
group by age
order by 2 desc;
문제 : 통신사, 통신사별 인원수 출력 통신사별 인원수가 높은것부터 출력
select decode(lower(telecom), 'skt','sk', lower(telecom)) as 통신사, count(*)
from emp14
group by decode(lower(telecom), 'skt','sk', lower(telecom))
order by 2 desc;
문제 : 이름의 성씨를 출력하고, 성씨별 인원수 출력, 성씨별 인원수가 높은것부터 출력
select substr(ename, 1, 1)as 성씨 , count(*)
from emp14
group by substr(ename, 1, 1)
order by count(*) desc;
문제 : 우리반 이메일 도메인을 출력하고, 이메일의 도메인별 인원수를 출력하시오
select rtrim(
substr(rtrim (
rtrim (lower(email), 'com'),
'net'),
instr(lower(email),
'@')+1),
'.')
,count (*)
from emp14
group by rtrim(
substr(rtrim (
rtrim (lower(email), 'com'),
'net'),
instr(lower(email),
'@')+1),
'.')
order by 2 desc;
(1)com 을 rtrim 으로 자르고 , 다음 net 을 자르고
(2) substr 그 잘린 문자들에서부터,
이메일의 @ 다음문자(+1)의 순서부터(단순 숫자가 아닌 이유는 다들 email 의 형태(길이 ) 가 다르기때문 ) '.' 의 전 (-1) 까지 추출한다는 의미이다.
'Oracle > SQL' 카테고리의 다른 글
SQL 데이터 분석함수 - 등급 출력 Ntile( 숫자) over( order by ~ desc/asc ) (0) | 2021.11.19 |
---|---|
SQL 데이터 분석함수 - 순위출력 Rank () over ( partition by /order by ~ desc/asc), Dense_Rank () (0) | 2021.11.19 |
SQL 다중행 함수 - 그룹함수 (SUM) 토탈값 (0) | 2021.11.19 |
SQL 다중행 함수 - 그룹함수 (AVG) 평균값 구하기 (0) | 2021.11.19 |
SQL 다중행 함수 - 그룹함수 (MIN) 최소값 (0) | 2021.11.19 |