0

我有以下查询:

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”列的总和。目前,我遍历上述查询返回的所有行,然后在 Ruby 中对“emp_count”进行 SUM。但是有很多行,所以这会占用很多内存。

我如何在 SQL 中对“emp_count”求和并只返回这个数字?

4

1 回答 1

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 文档中阅读有关子查询的更多信息,另请参阅:如何 SUM() MySQL 中的多个子查询行?

于 2012-07-24T17:42:35.900 回答