2017-05-08 138 views
0

我有一個數據集象下面這樣:總框架,組和平均

Student,Test1,Test2,Test3 
Saeed,59,94,81 
Sam,60,77,81 
Sammy,77,77,77 
Saman,76,76,34 
Shah,19,61,72 

我想獲得最高的整體平均的學生姓名。

首先,我試圖得到每個學生的平均數,但我的查詢有錯誤。我不明白爲什麼。

db.students.aggregate({$group : {_id:"$Student", Average: {$avg:["$Test1", "$Test2", "$Test3"]}}}) 

回答

1

您不需要$group階段。

使用$project計算其次是$sort遞減和$limit爲1

db.students.aggregate({ 
    $project: { 
     Student: 1, 
     avg: { 
      $avg: ["$Test1", "$Test2", "$Test3"] 
     } 
    } 
}, { 
    $sort: { 
     avg: -1 
    } 
}, { 
    $limit: 1 
}) 

僅供參考$avg https://docs.mongodb.com/manual/reference/operator/aggregation/avg/

+0

如果什麼有兩個學生用相同的最高平均$avg? – user7770852

+0

您可以在'$ sort'和'$ limit'之前添加'$ group' stage'{group:{_id:「$ avg」,students:{$ push:「$ Student」}} },將推動同樣平均的學生。 – Veeram

+0

非常感謝您的幫助!我嘗試使用不同的邏輯,但不知道如何編寫代碼:首先使用$ project獲取$ avg,然後使用$ group獲取$ max。 db.students.aggregate {$ project:{_id:「$ Student」,Avg:{$ avg:[「$ Test1」,「$ Test2」,「$ Test3」]}}}, {$ group: {_id:「$ Student」,Max:{$ max:「$ Avg」}}})但結果如下{「_id」:null,「Max」:94.66666666666667}。我還想顯示學生姓名和每個考試分數。 – user7770852