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
운영게시판
최근게시물
PostgreSQL Q&A 4410 게시물 읽기
No. 4410
[질문]하나의 조건을 여러필드에 각각주어서 insert하는방법
작성자
주절이
작성일
2002-10-24 16:50
조회수
1,012

c d e f

0.12 0.23 0.34 0.34

0.23 0.34 0.32 0.22

0.45 0.35 0.11 0.22

0.34 0.44 0.34 0.90

 

--> 위와 같은 test_tbl 이라는 테이블이 있다고 가정할 때,

제가 원하는 것은 아래와 같습니다.

 

c d e f

0.00~0.10 0 1 2 0

0.10~0.20 0 2 3 0

......

0.50~0.60 0 1 1 0

 

--> 이와 같이 한 라인씩 insert하고 싶습니다. 하단의 sql이 제가

작성한 sql인데요. 이런식으루 하면 between 앞에 조건을 명시

해야 한다는 걸 깜박했습니다. 전부 c의 count가 들어가더군요.

물론 당연하지만...ㅡ.,ㅡ;;

 

위와 같이 insert를 하길 원합니다. 한 줄씩 insert하는 방법이라고

괜찮으니, 하단의 sql의 수정을 좀 부탁드립니다.

 

insert into count_tbl

select count(c), count(d), count(e), count(f)

from test_tbl where c BETWEEN 0.10 and 0.20 ;

 

주절주절 질문이 길어졌네요.~~ 읽어주신분들 감사하구요~

좋은 하루 되세요~~~

 

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

SELECT

( CASE c between 0.00 and 0.10 THEN '0'

CASE c between 0.11 and 0.20 THEN '1'

CASE c between 0.21 and 0.30 THEN '2'

....

CASE c between 0.51 and 0.60 THEN '5'

ELSE '6'

END

) as c_val,

count(*) AS cnt

FROM test_tbl

GROUP BY c_val;

 

이렇게 하면 c 값에 대한 한줄을 구할수 있지 않을까요. d/e/f 에 대해서도 같은 식으로 하면 되지 않을까요.

 

물론 JOIN 을 이용하면 하나의 query 로도 가능한 방법이 있을것입니다. 예전에 상기님 께서 글을 주신 기억이 있는데, 김상기님 이름으로 한번 검색해 보시기 바랍니다. ^^;;

정재익(advance)님이 2002-10-25 03:21에 작성한 댓글입니다.

함수로 처리해본다면


create table tt1 (
	c	float,d	float,e	float,f	float
);

create table tt2 (
	typ	int,
	c  float,d float,e float,f float
);

insert into tt1 values(0.12,0.23,0.34,0.34);
insert into tt1 values(0.23,0.34,0.32,0.22);
insert into tt1 values(0.45,0.35,0.11,0.22);
insert into tt1 values(0.34,0.44,0.34,0.90);

위와같이 샘플을 넣고

create or replace function abc() returns int as '
declare
	svl	float[][];
	cnt	int;
begin
	svl := ''{{0.00,0.10},{0.10,0.20},{0.30,0.40},{0.40,0.50}}'';
	cnt := 1;
	while cnt < 5 loop
		insert into tt2 
		select cnt,
			sum( case when c between svl[cnt][1] and svl[cnt][2] then 1 else 0 end ) as c,
			sum( case when d between svl[cnt][1] and svl[cnt][2] then 1 else 0 end ) as d,
			sum( case when e between svl[cnt][1] and svl[cnt][2] then 1 else 0 end ) as e,
			sum( case when f between svl[cnt][1] and svl[cnt][2] then 1 else 0 end ) as f
		from tt1;
		cnt := cnt + 1;
	end loop;
	return cnt;
end;
' language 'plpgsql';

이런 함수를 만들나서

select abc();

하니 tt2에 결과가 만들어지네요

황치영님이 2002-10-25 17:21에 작성한 댓글입니다.

중괄호가 모두 깨져들어갔네요

 

함수문중에 svl다음을

svl := ''[[0.00,0.10],[0.10,0.20],[0.30,0.40],[0.40,0.50]]'';

 

대괄호를 중괄호로 모두 바꿔주세요

황치영님이 2002-10-25 17:25에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
4415DB 값을 다른 DB에 저장 할 수 있나요? [1]
신성하
2002-10-28
935
4413배열의 요소 전부를 검색하는 방법이 있나요? =_= [9]
신기배
2002-10-25
1234
4411pg_xlog 디렉토리 화일을 삭제했을 때 복구방법이 있는지요.. [1]
김순석
2002-10-25
1539
4410[질문]하나의 조건을 여러필드에 각각주어서 insert하는방법 [3]
주절이
2002-10-24
1012
4412┕>Re: [감사^^]하나의 조건을 여러필드에 각각주어서 insert하는방법
주절이
2002-10-25 10:47:59
889
4409[추카] 드뎌 성공했습니다 [2]
이근호
2002-10-24
977
4407[질문] 아래 글에 덧붙여..--; 계속 에러가 납니다. [2]
이근호
2002-10-24
730
4408┕>Re: [질문] 아래 글에 덧붙여..--; 계속 에러가 납니다.
이근호
2002-10-24 13:54:56
794
4406[참고] 아래 정재익님 덧말에 덧붙여.. [1]
이근호
2002-10-24
772
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다