MySQL:获得200,000行的平均值或总和

时间:2013-12-17 01:34:08

标签: mysql sql sum

我想从mySQL数据库获得平均值或至少200,000行的总和。这就是我查询数据库的方式,但数量太大,我无法查询,因为我无法承受服务器的重载。

SELECT user_id, total_email FROM email_users
WHERE email_code = 1
LIMIT 200000

SELECT SUM(total_email), AVG(total_email) FROM email_users
WHERE user_id IN
(
01, 02,..., 200000-th user_id
)

我的问题是有一种方法以某种方式将两个查询合并为一个,这样我就可以得到200,000个email_code = 1的email_users的总和或平均值。

编辑:感谢所有回答。我没有意识到答案是如此简单 - 嵌套的select语句。

3 个答案:

答案 0 :(得分:1)

假设您只想要来自DB的任何200K记录,其中包含这样的内容,其中email_code = 1

SELECT SUM(total_email), AVG(total_email) FROM email_users
WHERE user_id IN
(
  SELECT user_id 
  FROM email_users 
  WHERE email_code = 1 LIMIT 200000
)

SELECT SUM(total_email), AVG(total_email) FROM 
  (SELECT user_id , total_email
       FROM email_users 
       WHERE email_code = 1 LIMIT 200000) 

答案 1 :(得分:1)

您可以使用子查询执行此操作:

SELECT SUM(total_email), AVG(total_email) 
from (SELECT eu.*
      FROM email_users eu
      WHERE eu.email_code = 1
      LIMIT 200000
     ) eu

一些笔记。首先,使用limit而不使用order by会产生不确定的结果。您可以(理论上)运行此查询两次并获得不同的结果。其次,假设total_email中有一个名为email_users的字段。

答案 2 :(得分:1)

SELECT SUM(total_email), AVG(total_email)
FROM (SELECT total_email
      FROM email_users
      WHERE email_code = 1
      LIMIT 200000) x