2013-12-17 34 views
0

我想從mySQL數據庫中獲得平均值或至少200,000行的總和。這是我查詢數據庫的方式,但數量太大,無法查詢,因爲我無法負擔過重的服務器。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 
) 

我的問題是有辦法的兩個查詢以某種方式合併成一個,這樣我可以得到公正的總和或平均20萬個email_users具有email_code = 1

編輯:感謝社會各界已回答。我沒有意識到答案非常簡單 - 嵌套選擇語句。

+2

沒有訂單條款的限制條款沒有多大意義。你想要什麼200000行? –

+0

@DanBracuk - 我不得不限制200k,因爲那裏有數千萬的數據。我只是想分析一小部分數據用於分析,因爲我不能查詢整個數據庫,因爲它是一個活動服務器。 – Cryssie

+0

所以你只想要一個隨機的200K記錄的總和? – JohnFx

回答

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會得出不確定的結果。你可以(理論上)運行這個查詢兩次並得到不同的結果。其次,這假設在email_users中有一個名爲total_email的字段。

1

如何像這樣假設你只是想從數據庫中任何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) 
+0

你錯過了子查詢中的'FROM'子句。 – Barmar

+0

謝謝。修復。 – JohnFx

+0

您的第二個查詢不起作用,因爲子查詢未返回total_email。我猜你想讓它像我的答案。 – Barmar

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