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 5764 게시물 읽기
No. 5764
이걸 쿼리한방으로 처리할 수 있을까요..
작성자
장현성(siche)
작성일
2004-12-27 15:03ⓒ
2004-12-27 15:04ⓜ
조회수
2,525

매입,매출에 관련된 뭐 흔한 얘기입니다만,

조금 특색있게 맞추다 보니 별 복잡한 경우가 다 생기네요 @_@

 

일단 매출이 있고..

각 매출마다 매입이 1개이상 발생할 수 있구요

매입은 처리 담당자가 있습니다.

 

요걸 각 테이블로 나눠서 아래처럼 되어 있습니다.

 

table : people

name | gubn

A | t

B | t

C | f

D | f

 

table : meip

ID | name | meip_p

1 | A | 1000

1 | C | 500

2 | B | 2000

3 | D | 300

 

table : mech

ID | mech_p

1 | 10,000

2 | 5,000

3 | 7,000

 

이걸 가지고 매출ID별 매입금액과 비율을 보여주려 하는데

담당자 테이블에 gubn컬럼이 t인 사람과 f인 사람에 따라

매입금액은 상관없이 합해지면 되고

매입비율은 t인 사람의 것만 가지고 계산을 해야 합니다.

 

매출ID | 매출액 | 매입금액 | 매입금액(t인것만) | 매입비율

1 | 10,000 | 1,500 | 1,000 | 10%

2 | 5,000 | 2,000 | 0 | 40%

3 | 7,000 | 0 | 300 | 0%

 

이런식으로 보였으면 좋겠는데,

젤 오른쪽 비율은 SQL문에서 처리 안되어도 됩니다.

프로그램에서 해주면 되는것이니

근데, 이게 한방에 해보려는데 잘 안되네요..

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

이런 경우는 일반적으로 inline view 기능과 outer join 기능을 이용합니다.

 

쿼리가 조금 지저분한데, 잘 읽어보세요. 별로 어렵지 않은 쿼리이니...

mydb=# select 
c.id as "매출ID", 
c.mech_p as 매출액, 
b.meip_p as 매입액, 
coalesce(bb.meip_p,0) as "매입금액(t인것만)"
from mech c 
left outer join 
(select id,sum(meip_p) as meip_p 
  from meip 
  group by id) b 
on (c.id = b.id) 
left outer join 
(select b.id,sum(b.meip_p) as meip_p 
  from people a, meip b 
  where b.name = a.name and a.gubn = 't' 
  group by b.id) bb 
on (c.id = bb.id);

 매출ID | 매출액 | 매입액 | 매입금액(t인것만)
--------+--------+--------+-------------------
      1 |  10000 |   1500 |              1000
      2 |   5000 |   2000 |              2000
      3 |   7000 |    300 |                 0

 

핵심은 각 column 값들이 하나의 inline view가 되고, 이것이 매출테이블과 outer join 합니다.

 

김상기(ioseph)님이 2004-12-27 22:35에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
5768인스톨을 자동으로할려고 하는데요.... [3]
초보
2004-12-28
3459
5767윈도우XP에서 설치 질문이요... [4]
초짜
2004-12-28
2847
5765세개이상의 테이블에서 outer join은 안되나요 [4]
초보
2004-12-27
6359
5764이걸 쿼리한방으로 처리할 수 있을까요.. [1]
장현성
2004-12-27
2525
5763segment file 크기를 어떻게 조절하는지. ^^; [4]
이실
2004-12-27
2385
5762benchmark 순위 사이트 어떨까요? [2]
박성철
2004-12-27
2282
5761날짜를 밀리세컨드 형태로 넣을려구하면 어떻게 해야하나여? [1]
박진호
2004-12-26
2226
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2020 DSN, All rights reserved.
작업시간: 0.010초, 이곳 서비스는
	PostgreSQL v13.1으로 자료를 관리합니다