mysql query 질문 드립니다. 0 2 586

by 치킨 [MySQL] [2016.09.30 13:54:57]


안녕하세요. 간단한 쿼리를 작성하고 있는데 며칠째 막혀서 질문드립니다.

데이터가 들어 있는 테이블 A

idx int(11) NO PRI   auto_increment
reg_time datetime NO      
val text NO      

 

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

시간 값 조인을 위한 테이블 B

val  text  No

val text NO    

 

 

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

이렇게 있다고하면, 아래와 같이 쿼리를 짜봣습니다.


select ifnull(substr(a.reg_time,1,10),0) as gdates,   
          ifnull(substr(a.reg_time,12,2),0) as times, ifnull(round(avg(a.val),2),0) as val
from info_radio as a
right outer join hour_table as b
on substr(a.reg_time,12,2)=b.val
and substr(a.reg_time,1,10)  between'2016-09-21'and '2016-09-22'
group by b.val
order by substr(a.reg_time,1,10),substr(a.reg_time,12,2) asc;

원하는 결과 값은 아래와 같습니다.

만약 info_radio에 해당 일자에 대한 정보가 없으면 전부 0으로 출력 되게 하고 싶은데

ex)

 

0 0 0.00
0 0 0.00
0 0 0.00
0 0 0.00
0 0 0.00

 

제가 짠 쿼리는 오직 하나의 일자만 정상적으로 동작을 합니다. 1일 이상 조회하게 되면 info_radio에 있는 정보만 끄집어 옵니다.
대체 어떻게 해야할지 몰라 선배님들의 조언을 듣고 싶어 글올립니다.

by 마농 [2016.09.30 14:45:12]

시간 테이블 외에 일자 테이블이 하나 더 필요합니다.

일자 테이블에 검색 조건 주시고

시간테이블과 크로스 조인 하신 뒤에

데이터 테이블을 일자와 시간으로 아우터 조인 하시면 되겠습니다.

SELECT a.일자
     , b.시간
     , AVG(c.값)
  FROM 일자테이블 a
 INNER JOIN 시간테이블 b
    ON 1=1
  LEFT OUTER JOIN 데이터테이블 c
    ON a.일자 = c.일자
   AND b.시간 = c.시간
 WHERE a.일자 BETWEEN '시작일' AND '종료일'
 GROUP BY a.일자, b.시간
;

 


by 치킨 [2016.09.30 15:29:37]

아... 이해했습니다. 해보도록 하겠습니다.

제가 큰 착각을 했네요 두개의 테이블만으로 해결하려고 했어요. 제가 조인 조건도 이상하게 줬네요;

감사합니다.!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입