LINUX/DB

[query] 여러 부분, 부분 합계들을 한번에 처리하기.

OJR 2009. 4. 29. 15:16
SELECT c.area_id, if(c.area_id is null, '전체', c.name) name, IF(c.enabled = 'Y', 'Y', '-') enabled,
        SUM(1) T,
        SUM(IF(a.enabled = 'Y', 1, 0)) TY,
        SUM(IF(a.area_type = 'S' AND a.enabled = 'Y', 1, 0)) SY,
        SUM(IF(a.area_type = 'S' AND a.enabled = 'N', 1, 0)) SN,
        SUM(IF(a.area_type = 'H' AND a.enabled = 'Y', 1, 0)) HY,
        SUM(IF(a.area_type = 'H' AND a.enabled = 'N', 1, 0)) HN
FROM Area a
JOIN Area c ON a.title_area_id = c.area_id
WHERE a.area_type IN ('S', 'H')
AND c.area_type = 'C'
GROUP BY c.name WITH ROLLUP

SELECT if (t.no = 1, t.no, c.area_id) area_id,
      if (t.no = 1, '전체', c.name) name, IF(c.enabled = 'Y', 'Y', '-') enabled,
        SUM(1) T,
        SUM(IF(a.enabled = 'Y', 1, 0)) TY,
        SUM(IF(a.area_type = 'S' AND a.enabled = 'Y', 1, 0)) SY,
        SUM(IF(a.area_type = 'S' AND a.enabled = 'N', 1, 0)) SN,
        SUM(IF(a.area_type = 'H' AND a.enabled = 'Y', 1, 0)) HY,
        SUM(IF(a.area_type = 'H' AND a.enabled = 'N', 1, 0)) HN
FROM Area a
JOIN Area c ON a.title_area_id = c.area_id
JOIN (select 1 no from dual union select 2 from dual) t
WHERE a.area_type IN ('S', 'H')
AND c.area_type = 'C'
and t.no < 3
GROUP BY if (t.no = 1, t.no, c.area_id)


SELECT if (t.no = 1, t.no, c.area_id) area_id,
      if (t.no = 1, '전체', c.name) name, IF(c.enabled = 'Y', 'Y', '-') enabled,
        SUM(1) T,
        SUM(IF(a.enabled = 'Y', 1, 0)) TY,
        SUM(IF(a.area_type = 'S' AND a.enabled = 'Y', 1, 0)) SY,
        SUM(IF(a.area_type = 'S' AND a.enabled = 'N', 1, 0)) SN,
        SUM(IF(a.area_type = 'H' AND a.enabled = 'Y', 1, 0)) HY,
        SUM(IF(a.area_type = 'H' AND a.enabled = 'N', 1, 0)) HN
FROM Area a
JOIN Area c ON a.title_area_id = c.area_id
JOIN copy_t t
WHERE a.area_type IN ('S', 'H')
AND c.area_type = 'C'
and t.no < 3
GROUP BY if (t.no = 1, t.no, c.area_id)


도시별 카운트, 전체 카운트

GROUP BY ... WITH ROLLUP 을 이용한 방법과
(WITH ROLLUP null 이 나와서 속이 썩히네. 어떻게 고쳐야 하나?)

copy_t 라는 테이블을 만들어 사용하는 방법이다.
copy_t 테이블 이용 블로그
http://blog.naver.com/whwlfnsl?Redirect=Log&logNo=70028760617

copy_t  를 이용한 방법은 
느끼기에 "대단한 꼼수다~ 월척이구나~ ㅋㅋㅋ"
사람들 참 머리 좋다!

https://msevents.microsoft.com/CUI/Register.aspx?culture=ko-KR&EventID=1032350911&CountryCode=KR&IsRedirect=false
반응형

'LINUX > DB' 카테고리의 다른 글

기존 테이블 생성 쿼리 확인  (0) 2009.06.09
25가지 SQL작성법  (0) 2009.04.30
mysql 쿼리 문자열 검색  (0) 2009.03.17
ORDER BY CASE  (0) 2008.12.04
InnoDB, MyISAM  (0) 2008.09.26