我有以下查询:
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 :(得分: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?