database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Q&A 25709 게시물 읽기
No. 25709
회원별 통계 쿼리 질문입니다.
작성자
이창민(Prosper)
작성일
2006-08-09 14:59
조회수
2,585

아래 그림과 같은 통계를 내려고 합니다.

Mysql 3.23.59 버전 이라서 서브 쿼리는 안됩니다.

쿼리 여러번 쓰면 해결은 되겠지만, 혹시나 한번에 해결할수있지 않을까 해서 적습니다.

 

mb_birth varchar(255) 20001010 // YYYYMMDD

mb_fld int(4) 1 // 1이면 웹회원 0이면 신도회원

mb_code varchar(255) 01-00001 // 지역별 01(중구) 02(남구)

 

group by 와 case를 써서 한번에 해결해 볼려고 했는데 잘안되네요..

 

미리 감사드립니다.

 

이 글에 대한 댓글이 총 6건 있습니다.

union 으로 될 것 같삼~~


(select 일치된 필드명, count(*) from 테이블 where 검색조건1 group by 1)

union

(select 일치된 필드명, count(*) from 테이블 where 검색조건2 group by 1)

union

...

 

신기배(소타)님이 2006-08-10 14:31에 작성한 댓글입니다.

고맙삼

근데 3.23.59 에서 union이 되는강?

안되는걸로 아는뎅

해보고 리플 달겠삼


UNION is used to combine the result from multiple SELECT statements into a single result set. UNION is available from MySQL 4.0.0 on.


3.23.59에서는 union이 안되삼

이창민(Prosper)님이 2006-08-10 14:43에 작성한 댓글입니다.
이 댓글은 2006-08-10 14:54에 마지막으로 수정되었습니다.

윽.. 지명타자이다 보니 부끄럽게나마 저의 생각을 올려봅니다.


group by는 필요없구요.


SELECT

 SUM( IF( mb_fld = 1, 1, 0 ) ) AS '웹 회원 합',

 SUM( IF( mb_fld = 0, 0, 1 ) ) AS '신도 회원 합',

 SUM( IF( mb_fld = 1, IF( sex = 'M', 1, 0) , 0 ) ) AS '웹 회원 남성 합',

 SUM( IF( mb_fld = 1, IF( sex = 'F', 1, 0) , 0 ) ) AS '웹 회원 여성 합',

 SUM( IF( mb_fld = 0, 0, IF( sex = 'M', 1, 0 ) ) ) AS '웹 회원 남성 합',

 SUM( IF( mb_fld = 0, 0, IF( sex = 'F', 1, 0 ) ) ) AS '웹 회원 여성 합',

 SUM( IF( mb_code = '01', 1, 0 ) AS '중구 회원 합',

 SUM( IF( mb_code = '01', IF( sex = 'M',1 , 0 ) ) ) AS '중구 회원 남성 합',

 SUM( IF( mb_code = '01', IF( sex = 'F',1 , 0 ) ) ) AS '중구 회원 여성 합',

....

....

....

FROM

 tab_name


이렇게 하면 될 듯 한데요.

결과는 보장못합니다. ㅎㅎ;

안되면 IF를 열라 중첩하면 될꺼예요.


그런데 저의 경우는 나중 유지보수를 위해 복잡한 1개의 쿼리보단 단순한 여래 개의 쿼리를 선호하는 편이라^^

허정수(wertyu)님이 2006-08-10 16:26에 작성한 댓글입니다.

내가 첨에 if 가지고 그짓을 했는데...


오라클 쓰는넘이 case 로 하는게 더좋지 않냐고해서..


내가 한거랑 차이가 중첩if 라는게 틀리네


정수 고마워..

그리고 FF에서도 에디터가 붙어있어서 무지 편하네.. ㅋㅋㅋ

이창민(Prosper)님이 2006-08-10 16:29에 작성한 댓글입니다.

ㅎ 다른분이 댓글 달았네요 .ㅋ 
case 사용하면 .ㅋ이렇겠죠 .ㅎ

select
case when mb_fld='1' then '웹회원'
else '신도회원'
end mbfld
,case  when left(mb_code,2)='01' then '중구'
 when left(mb_code,2)='02' then '남구'
else '타지역'
end mbcode
,case when (year(now())-year(mb_birth))+1<20 then '10대'
when (year(now())-year(mb_birth))+1>=20 and (year(now())-year(mb_birth))+1<30 then '20대'
when (year(now())-year(mb_birth))+1>=30 and (year(now())-year(mb_birth))+1<40 then '30대'
when (year(now())-year(mb_birth))+1>=40 and (year(now())-year(mb_birth))+1<50 then '40대'
when (year(now())-year(mb_birth))+1>=50 and (year(now())-year(mb_birth))+1<60 then '50대'
else '60대이상'
end mbbirth
,count(*) cnt,sum(mem_sex='m') mcnt,sum(mem_sex='f') fcnt from TB_NAME
group by 1,2,3

반화넬(반씨아찌)님이 2006-08-10 16:32에 작성한 댓글입니다.

오옷... 반씨아찌님 감사합니다.


아싸~

이창민(Prosper)님이 2006-08-10 16:35에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
25713날짜 변환 [1]
닉산
2006-08-10
2396
25712replication 관련 [3]
CoolImpact
2006-08-09
1675
25711utf8 관련 [4]
가입자
2006-08-09
4783
25709회원별 통계 쿼리 질문입니다. [6]
이창민
2006-08-09
2585
25708[질문]4.x 에서는 되었었는데 5.x 에서는 안되는데요.. [2]
이정득
2006-08-09
1258
25707캐릭터셋 변경방법 알려주세요.. [1]
유은영
2006-08-09
1871
25706어떤 쿼리가 더 좋을까요?
사랑뉘
2006-08-09
1062
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다