SELECT DECODE 질문입니다. 0 11 5,130

by 손님 DECODE [2008.05.12 23:44:41]


안녕하세요

decode를 이용해 조회를 하고싶은데 잘안되요

제가 하려는건

각학년별로 남자 여자의 수를 구하고  그 합을 구하는겁니다.

테이블을 쉽게 정리하면

create table school(

year varchar2(1),

sex varchar2(1)

);

이정도로 표현함 됩니다.

year 은 학년의 표시로 1은 1학년 2는 2학년 3은 3학년

sex는 남녀의 구분으로 1은남자 2는 여자

 

검색하여 나올 테이블 모양을 그려본다면..      

전체남자 전체여자 전체총 1학년남자 1학년여자 1학년총 2학년남자 2학년여자 2학년총 3학년남자 3학년여자 3학년총
30 30 60 10 10 20 10 10 20 10 10 20

 

 

맨앞의 3칸은 학교 전체

그다음 부터는

1학년

2학년

3학년

입니다.

밑의 숫자들은 제가 임의로 작성한겁니다.(말주변이없어서 ..숫자를 보심 이해가 빠르리라 생각해서)

저런값이 출력될수있는 조회문좀 알려주세요

부탁드립니다.

by 현 [2008.05.13 06:49:16]
select
sum(sex,'남',1) 남자전체,
sum(sex,'여',1) 여자전체,
count(*) 전체,
sum(year,'1',decode(sex,'남',1)) 1학년남자,
sum(year,'1',decode(sex,'녀',1)) 1학년여자,
....
코드값을 맞는 값으로 바꾸시고, 이런식으로 하시면 됩니다.

by 손님 [2008.05.13 09:15:28]
숫자를 구하는건데...sum이 들어가나요???count가 맞을거 같은데..ㅡ.ㅡ;
그래도 ㄳ여..확인해보겠습니다.

by 된장 [2008.05.13 09:27:06]
현님이 쓴거가..sum(sex,'남',1) 남자전체,
->sum(decode(sex,'남'.1,0)) 남자전체 정도 되어야 할 듯 한뎅.ㅋ.ㅋ.

by 채용근 [2008.05.13 09:35:57]
select
sum(sex,'1',1) 남자전체,
sum(sex,'2,1) 여자전체,
count(*) 전체,
sum(year,'1',decode(sex,'1',1)) 1학년남자,
sum(year,'1',decode(sex,'2',1)) 1학년여자,
...... 쪼끔 수정

by 마농 [2008.05.13 09:40:18]
1. SUM(DECODE(sex,'남',1,0))
2. NVL(SUM(DECODE(sex,'남',1)),0)
3. COUNT(DECODE(sex,'남',1))
1,2,3번 방법이 있는데. 3번을 사용하는것이 적당하겠지요.
1번은 0을 sum하는 쓸데없는 짓을 반복해서 안좋구요
2번은 1만 sum하지만 nvl처리를 해줘야만 카운트가 0인 경우도 나옵니다.
합계를 구하는것이 아니라 갯수를 세는 경우에는 그에 맞는 COUNT를 사용하는것이 좋겠네요.

by 된장 [2008.05.13 09:48:27]
아항..맞네용...COUNT 값에..NULL은 숫자를 세리지 않으니깐..COUNT가 적당하네욤...~~~..~~..오홍.

by 손님 [2008.05.13 09:53:20]
두분ㄳ여
select

count(*) 전체,
sum(decode(sex,1,1)) 남자전체,
sum(decode(sex,2,1)) 여자전체,
sum(DECODE(year,'1',decode(sex,'1',1))) 남자1,
sum(DECODE(year,'1',decode(sex,'2',1))) 여자1,
SUM(DECODE(year,'1',1)) 총1,
sum(DECODE(year,'2',decode(sex,'1',1))) 남자1,
sum(DECODE(year,'2',decode(sex,'2',1))) 여자1,
SUM(DECODE(year,'2',1)) 총1,
sum(DECODE(year,'3',decode(sex,'1',1))) 남자1,
sum(DECODE(year,'3',decode(sex,'2',1))) 여자1,
SUM(DECODE(year,'3',1)) 총1
FROM
school

로 해결했습니다.

그런데 sum 말고
sount로는 안되나여?

by 마농 [2008.05.13 10:03:24]
SUM(DECODE(year,'1',DECODE(sex,'1',1))) ==> COUNT(DECODE(year||sex,'11',1))

by 된장 [2008.05.13 10:26:56]
오홍 좋네요...함수 세번쓸것을 두번 쓰공 SUM을 COUNT로 오오오~~~

by 손님 [2008.05.13 12:39:00]
모두 ㄳ요
그리고 마농님 새로운거 배웠습니다..ㄳㄳ

by 현 [2008.05.14 08:12:11]
이런...답변만 달고 추가로 보지 않았더니 에러가 있는 것을 몰랐네요..
sum decode 로 해결하시는게 맞습니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입