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 26852 게시물 읽기
No. 26852
GROUP BY 해결책을 부탁드립니다.
작성자
이승환
작성일
2007-07-12 11:38
조회수
2,439

결산 관련 쿼리를 수정하고 있습니다.

누가 구조를 이렇게 잡아두었는지도 모르겠고 

왜 이렇게 잡았는지도 모르겠으나 

결국엔 스키마 수정 없이 쿼리로 해결을 해야한다는 결론이지요 ^^;



SELECT

A.DOMAIN_TOTAL, B.HOSTING_TOTAL, C.DESIGN_TOTAL, D.SHOP_TOTAL, E.CONTENT_TOTAL, F.DEPOSIT,

(A.DOMAIN_TOTAL+B.HOSTING_TOTAL+C.DESIGN_TOTAL+D.SHOP_TOTAL+E.CONTENT_TOTAL+F.DEPOSIT) AS TOTAL

FROM (

 (SELECT SUM(total) AS DOMAIN_TOTAL FROM money WHERE `date`='2007-07-06' AND service='domain') A,

 (SELECT SUM(total) AS HOSTING_TOTAL FROM money WHERE `date`='2007-07-06' AND service='hosting') B,

 (SELECT SUM(total) AS DESIGN_TOTAL FROM money WHERE `date`='2007-07-06' AND service='design' AND (service2 NOT IN (2,3,4))) C,

 (SELECT SUM(total) AS SHOP_TOTAL FROM money WHERE `date`='2007-07-06' AND service='shop') D,

 (SELECT SUM(total) AS CONTENT_TOTAL

 FROM (

  (SELECT total FROM money WHERE `date`='2007-07-06' AND service='life') UNION ALL

  (SELECT total FROM money WHERE `date`='2007-07-06' AND service='comics') UNION ALL

  (SELECT total FROM money WHERE `date`='2007-07-06' AND service='movie')

 ) X) E,

 (SELECT SUM(total) AS DEPOSIT FROM money WHERE `date`='2007-07-06' AND service='deposit') F




몇시간을 소비하여 이런식으로 서비스별로 하루의 결산치가 나오게끔 만들었습니다.

워낙에 정체를 알수없는 필드들이 많아서..

예.. 참 무식하고 성의없는 쿼리지요.. ^^;;

그래도 이게 좀 나아진 거에요... 흐흐..



어려움을 겪고있는 부분은,

이렇게하여 하루치의 결과는 뽑을 수 있습니다만

기간이 들어갔을때에는 날짜별로 GROUP BY 를 해줘야 할것같은데 그게 참 어려워 헤매고 있네요.


위의 쿼리를 보시면 아시겠지만 하나의 테이블에서 다 이뤄지는 겁니다 ^^;;


고수님들의 한말씀 부탁드립니다.

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

정말 누가 처음 만들었는지 몰라도 엄청나게 무개념한 쿼리군요...;
거의 비슷한 조건인데도 불구하고 컬럼이 하나 늘어난다고 테이블을 한번씩 더 access하다니...ㅡ.ㅡ;

하루치도 마찬가지고 기간검색도 마찬가지 입니다.
아래 형태로 변경하여 적용하셔야 합니다.

SELECT
      SUM(CASE WHEN service = 'domain' THEN total END) as DOMAIN_TOTAL
    , SUM(CASE WHEN service = 'hosting' THEN total END) as HOSTING_TOTAL
    , ... 중략 ...
    , SUM(CASE WHEN service = 'design' AND service2 NOT IN (2,3,4) THEN total END) as DESIGN_TOTAL
    , ... 중략 ...
FROM money
WHERE `date` BETWEEN '2007-07-06' AND '2007-07-10'

건승하시길...수고하세요~~

성시현(finecomp)님이 2007-07-12 13:59에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
26855PHP5 + MySQL5 // Shutdown이 안돼요~ ㅠㅠ
ㅠㅠ
2007-07-12
2167
26854mysql클러스터에서 mysql의 user테이블을 ndb로 하면?
dba
2007-07-12
1501
26853mysql 테이블명 최대 길이?? [1]
김태희
2007-07-12
2098
26852GROUP BY 해결책을 부탁드립니다. [1]
이승환
2007-07-12
2439
26851[질문] 다른 데이터베이스간의 스키마 차이 diff... [1]
lurker
2007-07-11
2747
26850한 row를 카피하는방법이 잇나요 [4]
스파르타
2007-07-11
4135
26849이런 오류 보신 고수분들의 조언 부탁드립니다
agogo
2007-07-11
2226
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.028초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다