select
C.YYYYMMDD,
(select first 1 skip 0 sum(X.sle_totprice) from sale X
where X.sle_date = C.YYYYMMDD
group by X.sle_mem_cd order by sum(X.sle_totprice) desc) No1,
(select first 1 skip 1 sum(X.sle_totprice) from sale X
where X.sle_date = C.YYYYMMDD
group by X.sle_mem_cd order by sum(X.sle_totprice) desc) No2,
(select first 1 skip 2 sum(X.sle_totprice) from sale X
where X.sle_date = C.YYYYMMDD
group by X.sle_mem_cd order by sum(X.sle_totprice) desc) No3
from cal C
where C.YYYYMMDD between '20070501' and '20070510'
일단, 그냥 금액만 가져와서 이렇게하니 만족스러운 속도가 나오긴 합니다.^^
(그래도 비효율적인 구조인것 같네요;;)
이쥐엔이에스 님이 쓰신 글 :
: 답변 감사합니다. 하지만, 제가 중요한건 말씀드리지 않았네요^^
: 예제을 참고해보면, Score라는 필드의 값이 가변적입니다.
:
: Sale 이라는 테이블(대략 100만건)이 있으며, 각 품목별 판매금액이 가변적입니다.
: 기간별 그날의 1위,2위,3위 하는 품목을 그래프로 보여주려고하는데;;
:
: rownum이나, rank 같은 함수가 없어 다음과 같이 하려고 생각도 합니다만..
: 100% 비효율적인 구조인것 같기도합니다. Cal 은 단순 달력T입니다.
:
: 좋은 방법 없을까요?
: select
: C.YYYYMMDD,
: (select sum(S.sle_totprice)
: from sale S
: where S.sle_date = C.YYYYMMDD
: and sle_mem_cd = (
: select first 1 skip 0
: X.sle_mem_cd
: from sale X
: where X.sle_date = C.YYYYMMDD
: group by X.sle_mem_cd
: order by sum(X.sle_totprice) desc
: )) No1
: from cal C
: where C.YYYYMMDD between '20070501' and '20070503'
:
:
: civilian,안영제 님이 쓰신 글 :
: : 테이블의 구조
: :
: : CREATE TABLE TEST (
: : ID INTEGER,
: : SCORE INTEGER
: : );
: :
: : 데이터
: :
: :
: : INSERT INTO TEST (ID, SCORE) VALUES (1, 80);
: : INSERT INTO TEST (ID, SCORE) VALUES (2, 88);
: : INSERT INTO TEST (ID, SCORE) VALUES (3, 90);
: : INSERT INTO TEST (ID, SCORE) VALUES (4, 80);
: : INSERT INTO TEST (ID, SCORE) VALUES (5, 70);
: : INSERT INTO TEST (ID, SCORE) VALUES (6, 64);
: :
: : 쿼리문
: :
: : SELECT S1.ID,S1.score
: : ,(SELECT COUNT(*)+1 FROM test S2 WHERE S2.score > S1.score) AS standing
: : FROM test S1
: : ORDER BY score desc
: :
: : 결과
: :
: : ID SCORE STANDING
: : 3 90 1
: : 2 88 2
: : 1 80 3
: : 4 80 3
: : 5 70 5
: : 6 64 6
: :
: : 주의사항
: :
: : 서브쿼리가 가능한 파이어버드 버전을 써야합니다.
: :
: : 이쥐엔이에스 님이 쓰신 글 :
: : : 안녕하세요. :)
: : :
: : : 다음과 같은 데이타가 있을때, B가 해당 Row중에 몇등인지 알수있는 함수가 있는지요?
: : :
: : : A 38
: : : B 23
: : : C 88
: : : D 22
: : :
: : : Thanks in advance.
|