การนับจำนวนครั้งที่ค่าซ้ำกัน (Frequency Count) ใช้ $group กับ $sum: 1
> db.demo676.insertOne({"Marks": 87});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea41eed04263e90dac943f2") }
> db.demo676.insertOne({"Marks": 75});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea41ef304263e90dac943f3") }
> db.demo676.insertOne({"Marks": 87});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea41ef404263e90dac943f4") }
> db.demo676.insertOne({"Marks": 65});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea41ef704263e90dac943f5") }
> db.demo676.insertOne({"Marks": 65});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea41ef804263e90dac943f6") }
แสดงข้อมูล:
> db.demo676.find();
คิวรีจัดกลุ่ม Marks และนับจำนวน
> db.demo676.aggregate({$group: { ... _id: {Marks: "$Marks"}, ... 'Count': {$sum: 1} ... }});ผลลัพธ์:
คำอธิบาย
- _id: {Marks: "$Marks"}: จัดกลุ่มตามค่า Marks (ใช้ object เพื่อให้ output ชัดเจน)
- $sum: 1: นับ 1 ต่อเอกสารในกลุ่ม = จำนวนครั้งที่ค่านั้นปรากฏ
รูปแบบ Output ที่อ่านง่ายกว่า
db.demo676.aggregate([
{$group: {_id: "$Marks", count: {$sum: 1}}},
{$project: {_id: 0, Marks: "$_id", Count: "$count"}},
{$sort: {Count: -1}}
]);
ผลลัพธ์:
Use Cases
- วิเคราะห์การกระจายคะแนนสอบ
- นับจำนวนออเดอร์ต่อสถานะ
- หาค่าที่พบบ่อยที่สุด (Mode)
- Detect anomalies (ค่าที่น้อยผิดปกติ)