2012-07-24 4 views
0

나는 다음과 같은 쿼리가에서 COUNT() 열 :SUM() MySQL의

SELECT COUNT(employees.id) AS emp_count 
FROM `orders` 
INNER JOIN `companies` ON `companies`.`id` = `orders`.`company_id` 
INNER JOIN employees ON employees.company_id = companies.id 
    AND (employees.deleted_at >= companies.activate_at OR employees.deleted_at IS NULL)      
    AND employees.created_at <= companies.activate_at 
WHERE 
    (companies.activate_at BETWEEN '2012-01-31 23:00:00' AND '2012-02-29 22:59:59'      
    AND orders.type = 'Order::TrialActivation' 
    AND orders.state = 'completed') 

나는 모든 "emp_count"열 SUM이 필요합니다. 현재 위의 쿼리에서 반환 된 모든 행을 반복하고 Ruby에서 "emp_count"의 SUM을 반복합니다. 그러나 많은 행이 있으므로 많은 메모리가 필요합니다.

SQL에서 "emp_count"에 대해 SUM을 계산하고이 숫자 만 반환하면 어떻게됩니까?

+0

다른 데이터를 가져 오는 이유는 무엇입니까? 내 말은 : 당신은 데이터를 얻고 당신이 찾고있는 합계를 얻습니다. 어떻게 그리고 어떻게 나타날 것입니까? –

+0

이것은 모호하고 위에서 제거되었습니다. 그것을 지적 주셔서 감사합니다. – skinkelynet

+3

나는 그 질문을 이해하지 못한다. 이 쿼리는 어쨌든 하나의 열 emp_count no가있는 행 하나만 반환합니다. 'GROUP BY' 또는 아무 것도 없습니다 – mask8

답변

1

--- 업데이트 : ---

문제가 업데이트 된 이후로, 나는 내 대답을 업데이 트됩니다 :

당신이 당신의 쿼리에서 행의 수를 얻으려고 노력하는 경우 WHERE 구문을 기반으로하면 COUNT()을 사용할 수 있습니다. 그러나 쿼리의 값이 모두 employees.id 인 경우에는 COUNT(employees.id)SUM(employees.id)으로 변경하면 원하는대로 처리 할 수 ​​있습니다.

--- 원래 대답 ---

가 (코드는 테스트하지) 좀 같이, 서브 쿼리를 사용해보십시오 :

SELECT SUM(x.emp_count) FROM (
    SELECT COUNT(employees.id) AS emp_count 
    FROM `orders` 
    INNER JOIN `companies` ON `companies`.`id` = `orders`.`company_id` 
    INNER JOIN employees ON employees.company_id = companies.id 
     AND (employees.deleted_at >= companies.activate_at OR employees.deleted_at IS NULL)      
     AND employees.created_at <= companies.activate_at 
    WHERE 
     (companies.activate_at BETWEEN '2012-01-31 23:00:00' AND '2012-02-29 22:59:59'      
     AND orders.type = 'Order::TrialActivation' 
     AND orders.state = 'completed') 
) x; 

당신은 MySQL documentation에서 하위 쿼리에 대한 자세한 읽을 수 있으며, 참조 : How to SUM() multiple subquery rows in MySQL?