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 29660 게시물 읽기
No. 29660
아래 질문한거 재 질문입니다
작성자
윤은숙(lydiay)
작성일
2010-05-18 11:45
조회수
8,054

전에 질문올렸었는데요
에러가 나서 해결을 못하겠더라구요
그래서 고수님들께 여쭤봅니다

pcontract의 테이블에서 조건에 맞는 값의개수와 합계를 구하여서
xe_closing 라는 테이블로 저장하는 명령입니다

pcontract 테이블내용
sdate              sgigum          sgubun          sgum
2010-05-01        수원              옷              1000
2010-05-01          서울                옷            2000
2010-05-03          수원              가방          300
2010-05-03          서울              옷              300

xe_closing 테이블
ldate        lgigum    sanga(옷개수)  sboga(가방개수)    ssum(옷합)    ssum2(가방합)
2010-05          수원              1                    1                          1000            300
2010-05          서울            2                    0                            2300            0

이렇게하기위하여

우선
select 문으로 pcontract 테이블의 내용중에서 조건에 맞는 자료를 개수랑 합을 구하는건 잘되는데요

select DATE_FORMAT(sdate,'%y-%m'),sgigum,count(sgubun),sum(sgum) from pcontract where sgubun="옷" group by DATE_FORMAT(sdate,'%y-%m'),sgigum ORDER BY `pcontract`.`sdate`  DESC";

이걸


INSERT into xe_closing (ldate,lgigum,sanga,ssum) values (select DATE_FORMAT(sdate,'%y-%m'),sgigum,count(sgubun),sum(sgum) from pcontract where sgubun="옷" group by DATE_FORMAT(sdate,'%y-%m'),sgigum ORDER BY `pcontract`.`sdate`  DESC)";

이렇게 하면

#1064 - 'SQL 구문에 오류가 있습니다.' 에러 같읍니다. ('select sdate,sgigum,count(sgubun),sum(sgum) from pcontract where sgubun="

이렇게 에러가뜹니다

한가지 질문더하겠습니다

INSERT into xe_closing (ldate,lgigum,sanga,ssum) values (select DATE_FORMAT(sdate,'%y-%m'),sgigum,count(sgubun),sum(sgum) from pcontract where sgubun="가방" group by DATE_FORMAT(sdate,'%y-%m'),sgigum ORDER BY `pcontract`.`sdate`  DESC)";

INSERT into xe_closing (ldate,lgigum,sboga,ssum2) values (select DATE_FORMAT(sdate,'%y-%m'),sgigum,count(sgubun),sum(sgum) from pcontract where sgubun="가방" group by DATE_FORMAT(sdate,'%y-%m'),sgigum ORDER BY `pcontract`.`sdate`  DESC)";


sanga(옷개수)  sboga(가방개수)    ssum(옷합)    ssum2(가방합)
구하기위하여  이렇게 두번 insert 문을 써야만
가능한가요?

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

일단 쿼리부터 올립니다.

INSERT INTO xe_closing

SELECT a.ym, a.sgigum, a.scount, b.scount, a.ssum, b.ssum FROM

( SELECT a.ym AS ym, a.sgigum AS sgigum, IFNULL(b.scount,0) AS scount, IFNULL(b.ssum,0) AS ssum FROM
( SELECT DATE_FORMAT( sdate, '%Y-%m' ) AS ym, sgigum FROM pcontract group by ym, sgigum ) a
LEFT JOIN
( SELECT DATE_FORMAT( sdate, '%Y-%m' ) AS ym, sgigum, count(sgubun) AS scount, sum(sgum) AS ssum FROM pcontract WHERE sgubun='옷' group by ym, sgigum ) AS b ON a.ym = b.ym AND a.sgigum = b.sgigum ) a

join

( SELECT a.ym AS ym, a.sgigum AS sgigum, IFNULL(b.scount,0) AS scount, IFNULL(b.ssum,0) AS ssum FROM
( SELECT DATE_FORMAT( sdate, '%Y-%m' ) AS ym, sgigum FROM pcontract group by ym, sgigum ) a
LEFT JOIN
( SELECT DATE_FORMAT( sdate, '%Y-%m' ) AS ym, sgigum, count(sgubun) AS scount, sum(sgum) AS ssum FROM pcontract WHERE sgubun='가방' group by ym, sgigum ) AS b ON a.ym = b.ym AND a.sgigum = b.sgigum ) b

ON a.ym = b.ym AND a.sgigum = b.sgigum;

 

 

쿼리가 넘 지저분하여, 굳이 설명을 드리면 다음과 같습니다.

  1. 옷과 가방을 각각 쿼리합니다.
    1. 이력이 없는 경우 행이 존재하지 않으므로, 이를 방지하기 위해 [날짜],[지점] 만 추출한 후,
    2. 이를 [날짜],[지점],[판매량],[판매총액] 쿼리와 조인합니다.
  2. 각각의 쿼리 결과를 조인합니다.

더 깔끔한 방법이 있을 것 같은데, 무식하게 하면 이렇게 되긴 됩니다.

 

 

덧) 올려주셨던 INSERT INTO ... SELECT 구문이 오류 났던 이유는 'VALUES'를 생략하지 않으셨기 때문입니다.

 

덧2) 개인적으로는 쿼리 결과를 피봇하는 것은 별로 좋지 않다고 생각됩니다. 옷이나 가방 외의 물품이 추가되는 경우에 쿼리가 계속 길어지기 때문입니다. 그냥 아래의 결과를 스크립트 레벨에서 적절히 처리해주는 것은 어떨까요.

SELECT DATE_FORMAT( sdate, '%Y-%m' ) AS ym, sgigum, sgubun, count(sgubun) AS scount, sum(sgum) AS ssum FROM pcontract GROUP BY ym, sgigum, sgubun;

박현우(lqez)님이 2010-05-19 18:34에 작성한 댓글입니다.

답변주신 박현우님에게 진심으로 감사드립니다
제가 mysql을 접한지 1달밖에 안되어서요  ㅋㅋ

친절한 답변에 다시한번감사합니다.

앞으로 열심히 공부하겠습니다

 

감사합니다

윤은숙(lydiay)님이 2010-05-19 22:33에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
29664분리된 테이블의 댓글 검색 쿼리 질문
루리
2010-05-22
6776
29663리플리케이션 문의 [1]
돌머
2010-05-19
6705
29661아주 간단한 쿼리질문인데 잘 안되네요.. ㅠㅠ [3]
쿼리초보
2010-05-19
7125
29660아래 질문한거 재 질문입니다 [2]
윤은숙
2010-05-18
8054
29658프로시저 관련 질문입니다. [2]
백승범
2010-05-17
9052
29657oracle TO_NUMBER를 Mysql로 변경하기 [1]
인투폴
2010-05-17
15251
29656여러게의 필드를 하나인덱스에 넣었을때 어떤차이가 있나요. [2]
VQ
2010-05-17
8230
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다