2017-10-02 12 views
0

서브 쿼리 또는 MySQL의 다른 메소드를 사용하여이 쿼리를 다시 작성하려면 어떻게해야합니까?subselects 사용 방법

SELECT i.resp_id as id 
 
    , Count(1) 
 
FROM int_result i 
 
    JOIN response_set rs on i.response_set_id = rs.id 
 
    JOIN cx_store_child cbu on rs.cx_business_unit_id = cbu.child_bu_id 
 
     AND cbu.business_unit_id = 30850 
 
     AND rs.survey_id IN (5550512,5550516,5550521,5550520,5590351,5590384,5679615,5679646,5691634,5699259,5699266,5699270) 
 
     AND i.q_id IN (52603091,52251250,52250724,52251333,52919541,52920117,54409178,54409806,54625102,54738933,54739117,54739221) 
 
     AND rs.t >= '2017-08-30 00:00:00' 
 
     AND rs.t <= '2017-09-30 00:00:00' 
 
GROUP BY rs.cx_business_unit_id, i.a_id;

+0

현재 코드와 현재 달성하고자하는 문제를 지정하십시오. 또한, 왜 당신은 선택에서'COUNT (1)'을 가지고 있는데, 항상 1을 반환 할 것입니까? – ulferts

+0

@ulferts, count (1)는 여러 레코드를 반환하지만 ... 1은 발견 된 레코드의 자리 표시 자입니다. count (*)와 같을 것입니다. – DRapp

+0

가독성이 한 가지이며, 다른 것을 최적화하십시오. 당신은 당신이 얻고 자하는 것을 정확하게 묘사 해 주실 수 있습니까? select 문에없는 필드별로 그룹화하고 레코드 수를 얻습니다. 그러나 당신이 원한 것은 무엇입니까? 또한 날짜 및 명시 시간별 필터링? rs.t 값이 '2017-09-30 11:27:53'이면 어떻게 될까요? <= 2017-09-30 시간 내에 계산되지는 않습니다. 어쩌면 rs.t <2017-10-01과 같이 가야합니까? 9/30에서 11:59:59까지를 포함합니까 ?? – DRapp

답변

0

어쩌면 그것이 :
나는 3 개 테이블을 사용하고?

SELECT i.resp_id as id 
    , Count(1) 
FROM int_result i, response_set rs, cx_store_child cbu 
WHERE i.response_set_id = rs.id 
     AND rs.cx_business_unit_id = cbu.child_bu_id 
     AND cbu.business_unit_id = 30850 
     AND rs.survey_id IN (5550512,5550516,5550521,5550520,5590351,5590384,5679615,5679646,5691634,5699259,5699266,5699270) 
     AND i.q_id IN (52603091,52251250,52250724,52251333,52919541,52920117,54409178,54409806,54625102,54738933,54739117,54739221) 
     AND rs.t >= '2017-08-30 00:00:00' 
     AND rs.t <= '2017-09-30 00:00:00' 
ORDER BY rs.cx_business_unit_id, i.a_id;