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 28947 게시물 읽기
No. 28947
조건에 따른 필드명 변경
작성자
황현태(sollent)
작성일
2009-06-27 18:40
조회수
6,023

안녕하세요 디비는 정말 힘드네요..

조건에 따라서 필드명을 따로이하여 그룹을 먹이고 싶어서요..

무식하게 예장되는 쿼리를 만들어보자면

select
  if(field01 > 10, 
    (
      (field00 - 10) as base,
      sum(field02) as re01,
      sum(field03) as re02,
      count(field04) as re03
    ),
    (
      field00 as base,
      sum(field02) as re04,
      sum(field03) as re05,
      count(field04) as re06
    )
  )
from table01
group by base

예상되는 결과로는
base | re01 | re02 | re03 | re04 | re05 | re06
1 | 20 | 20 | 20 | 20 | 20 | 20 
2 | 20 | 20 | 20 | 20 | 20 | 20 
3 | 20 | 20 | 20 | 20 | 20 | 20 
4 | 20 | 20 | 20 | 20 | 20 | 20 

이렇게 10보다 크면 re01,re02,re03 처럼 왼쪽으로 배치하고 10보다 작거나 같으면 오른쪽에 배치해서 같이 보여줄려고 합니다.

이거 머리 아파서 죽을 지경입니다.

합당한 방법이나 변칙적이 방법을 알고 계신분 고견을 알려주십시오.. 


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

테이블 크기 등 고려해서 아래 쿼리 활용

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

SELECT
  base
 , SUM(re01)
 , SUM(re02)
 , COUNT(re03)
 , SUM(re04)
 , SUM(re05)
 , COUNT(re06)
FROM

(
 (
 SELECT
   field00 - 10   AS base
  , SUM(field02)  AS re01
  , SUM(field03)  AS re02
  , COUNT(field04) AS re03
  , 0      AS re04
  , 0      AS re05
  , 0      AS re06
 FROM test
 WHERE
   field01 > 10
 GROUP BY base
 )
 UNION
 (
 SELECT
   field00    AS base
  , 0      AS re01
  , 0      AS re02
  , 0      AS re03
  , SUM(field02)  AS re04
  , SUM(field03)  AS re05
  , COUNT(field04) AS re06
 FROM test
 WHERE
   field01 <= 10
 GROUP BY base
 )
) AS re
GROUP BY base
;

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

SELECT
  base
 , SUM(re01)
 , SUM(re02)
 , COUNT(re03)
 , SUM(re04)
 , SUM(re05)
 , COUNT(re06)
FROM

(
 (
 SELECT
   field00 - 10   AS base
  , field02    AS re01
  , field03    AS re02
  , field04    AS re03
  , 0      AS re04
  , 0      AS re05
  , 0      AS re06
 FROM test
 WHERE
   field01 > 10
 )
 UNION
 (
 SELECT
   field00    AS base
  , 0      AS re01
  , 0      AS re02
  , 0      AS re03
  , field02    AS re04
  , field03    AS re05
  , field04    AS re06
 FROM test
 WHERE
   field01 <= 10
 )
) AS re
GROUP BY base
;

지나다가님이 2009-10-06 18:10에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
28990view에 관하여 [1]
초보자
2009-06-30
5304
28981select count(*) cnt ... having cnt > 1인 레코드 지우기 [1]
우영제
2009-06-29
6334
28976도와주세요 mysq l이 죽습니다. [2]
김종민
2009-06-29
5945
28947조건에 따른 필드명 변경 [1]
황현태
2009-06-27
6023
28944급!! MySQL Cluster 문의
급궁금
2009-06-25
5714
28897InnoDB Monitor Output 입니다. 문제가 있는지 좀 살펴봐주세요 ^^;
김승동
2009-06-22
5947
28834DB dump 질문입니다...ㅠ.ㅠ [4]
lhj
2009-06-18
8361
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다