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 30779 게시물 읽기
No. 30779
join 해서 결과값얻기
작성자
김양훈(yanghun72)
작성일
2014-10-21 18:01
조회수
8,404

[table1 ] [ table2]

 

no name day no jumsu

 

1 국어 2014-10-01 1 80

2 영어 2014-10-03 2 65

3 수학 2014-10-01 1 20

2014-10-01 3 50

 

 

 

2014-10-01 과목별 합계

 

select a.no,a.name,sum(if(day='2014-10-01',jumsu,0) from table1 a

left join table2 b on a.no=b.no and b.day='2014-10-01'

group by a.no

 

// 이런식으로 문제는 해결했는데

1 국어 100

2 영어

3 수학 50

 

 

그런데 table2 에 자료가 많아지니까 속도가 점점느려지네요

 

//

where b.day='2014-10-01'

문장을 넣으니까 속도는 빠른데 결과값이 영어가 빠지네요

당연한 결과같은데

 

1 국어 100

3 수학 50

 

// 속도를 올리면서 원하는 결과값을 얻을수 없을까요

 

 

 

 

 

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

            
       Select
              a.no
             ,a.name
             ,a.day
             ,IsNull(Sum(c.jumsu),0)
         From        
             (
                  Select
                         b.no
                        ,a.name
                        ,a.day
                    From
                        (                                                   
                          Select a.no                                             
                                ,c.name                                           
                                ,a.day                                            
                           From #table1 a                                         
                                          Full Outer Join (                       
                                                              Select a.name       
                                                                From #table1 a    
                                                            Group By a.name       
                                                           ) c                    
                                                               On 1 = 1           
                        ) a
                            Left Outer Join
                                            #table1 b
                                                      On a.name = b.name                                                            
               Group By b.no
                       ,a.name
                       ,a.day
             ) a                      
                 Left Outer Join
                                 #table1 b
                                           On a.no = b.no
                                          And a.day = b.day
                 Left Outer Join
                                 #table2 c
                                           On b.no = c.no
       Where a.day = '2014-10-01'                                   
    Group By a.no
            ,a.name
            ,a.day
    Order By a.day
            ,a.no
            ,a.name                                         
 

 

원하는 형태가 이게 맞는지 모르겠네요 ㅡ,ㅡ;

 

최한영(terry0515)님이 2014-10-22 09:52에 작성한 댓글입니다.

아우터 조인에서의 조건은
Where 절에 줄 때와 On 절에 줄 때 결과가 달라집니다.
지금 On 절에 주신게 맞구요.
Select 절에서의 If 문은 쓸데 없는 조건입니다.
이미 On 절에서 걸러졌기 때문이죠.

SELECT a.no
     , a.name
     , SUM(jumsu) jumsu
  FROM table1 a
  LEFT JOIN table2 b
    ON a.no  = b.no
   AND b.day = '2014-10-01'
 GROUP BY a.no
;


데이터가 쌓일수록 느리다면?
원인은 적절한 인덱스가 없다는 거죠.
table2(no, day) 인덱스가 있어야 합니다.
인덱스가 없다면?
대량의 아우터 조인이 부담될 수 있습니다.
이 때는 인라인뷰에서 미리 집계한 후에 조인하도록하세요

SELECT a.no
     , a.name
     , b.jumsu
  FROM table1 a
  LEFT JOIN (SELECT no
                  , SUM(jumsu) jumsu
               FROM table2
              WHERE day = '2014-10-01'
              GROUP BY no
             ) b
    ON a.no = b.no
;

마농(manon94)님이 2014-10-22 10:03에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
30783+ 3.339 sec. network 이 시간을 줄이는 방법이 있을까요?
김종수
2014-10-29
8917
30781쿼리문좀 봐주세요^^; [1]
초짜
2014-10-27
7944
30780[에러]키열 정보를 반환하지 않는 selectcommand [1]
개발자
2014-10-23
10623
30779join 해서 결과값얻기 [2]
김양훈
2014-10-21
8404
30776이해안되는 mysql 쿼리문 에러 질문 [1]
질문
2014-10-19
7923
30775mysql 다른 두 DB의 같은 테이블 값 비교... [1]
강석진
2014-10-17
8051
30774mysql - 시가, 고가, 저가, 종가 구하기 [1]
포맷
2014-10-15
8551
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.054초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다