文章目录
练习数据
// 插入数据
db.students.insertMany([
{
"_id": "1001",
"age": "19",
"credits": "52",
"major": "计算机应用技术",
"name": "程明",
"score": "92",
"sex": "男"
},
{
"_id": "1002",
"age": "18",
"credits": "51",
"major": "移动应用开发",
"name": "刘洋",
"score": "88",
"sex": "女"
},
{
"_id": "1003",
"age": "20",
"credits": "48",
"major": "计算机应用技术",
"name": "张静",
"score": "96",
"sex": "女"
},
{
"_id": "1004",
"age": "20",
"credits": "53",
"major": "软件技术",
"name": "陈好",
"score": "97",
"sex": "女"
},
{
"_id": "1005",
"age": "20",
"credits": "54",
"major": "计算机应用技术",
"name": "施行",
"score": "60",
"sex": "男"
},
{
"_id": "1006",
"age": "18",
"credits": "50",
"major": "软件技术",
"name": "刘文平",
"score": "86",
"sex": "女"
},
{
"_id": "1007",
"age": "20",
"credits": "55",
"major": "计算机应用技术",
"name": "李德胜",
"score": "95",
"sex": "男"
},
{
"_id": "1008",
"age": "18",
"credits": "50",
"major": "移动应用开发",
"name": "苏锦州",
"score": "70",
"sex": "男"
},
{
"_id": "1009",
"age": "20",
"credits": "53",
"major": "计算机应用技术",
"name": "张文杰",
"score": "40",
"sex": "女"
},
{
"_id": "1010",
"age": "18",
"credits": "47",
"major": "软件技术",
"name": "王林",
"score": "87",
"sex": "男"
},
{
"_id": "1011",
"age": "19",
"credits": "46",
"major": "计算机应用技术",
"name": "程梦凡",
"score": "66",
"sex": "男"
},
{
"_id": "1012",
"age": "19",
"credits": "45",
"major": "软件技术",
"name": "陈玉婷",
"score": "82",
"sex": "女"
},
{
"_id": "1013",
"age": "19",
"credits": "41",
"major": "计算机应用技术",
"name": "张春华",
"score": "64",
"sex": "男"
},
{
"_id": "1014",
"age": "18",
"credits": "49",
"major": "移动应用开发",
"name": "苏秦",
"score": "77",
"sex": "女"
},
{
"_id": "1015",
"age": "21",
"credits": "42",
"major": "软件技术",
"name": "李雨桐",
"score": "81",
"sex": "女"
}
])
一.练习题
(1)查询软件技术和移动应用开发专业学生的平均年龄。
db.students.aggregate([{
$match:{
"major": {$in:["软件技术","移动应用开发"]}
},
},{
$group:{
_id:"$major",
"年龄":{$avg:{$toInt:"$age"}},
}
}])
(2)查看计算机应用技术专业的学生,并按照学分进行降序的排序。
db.students.aggregate([{
$match: {
"major": "计算机应用技术"},
}, {
$sort: {
"score": -1}
}])
(3)查看计算机应用技术专业男生和女生的总学分,最高学分和最低学分。
db.students.aggregate([{
$match: {
"major": "计算机应用技术"},
}, {
$group: {
_id: "$sex",
"学科": {$first: "$major"},
"总学分": {$sum: {$toInt: "$score"}},
"最高学分": {$max:{$toInt: "$score"}},
"最低学分": {$min: {$toInt: "$score"}},
}
}])
(4)查询各个专业学生的平均成绩,第一个人的成绩和最后一个人的成绩。
db.students.aggregate([ {
$group: {
_id: "$major",
"平均成绩": {$avg: {$toInt: "$score"}},
"每科第一人的成绩": {$first: {$toInt: "$score"}},
"每科最后一人的成绩": {$last: {$toInt: "$score"}},
}
}])
(5)统计各个专业的学生人数并按人数从多到少排序
db.students.aggregate([{
$group: {
_id: "$major",
"人数": {$sum: 1}
}
},{$sort: {
"人数": -1}}])
(6)显示成绩排名第4和第5的学生的姓名,专业和成绩。
此题简单理解是这样的.但明显不符合逻辑.哪有不同专业pk成绩的.额各个专业专门统计太复杂
db.students.find().sort({
"score": -1}).skip(3).limit(2)
(7)统计不同性别的学生姓名。
db.students.aggregate([{
$group: {
_id: "$sex",
"姓名": {$push: "$name"},
}
}])
(8)查询年龄大于19的男生、女生人数。
/*法一*/
db.students.aggregate([
{
$match: {
$expr: {
"age":
{$gt: [{$toInt: "$age"}, 19]}
}
}
}
, {
$group: {
_id: "$sex",
"年龄大于19的人数": {$sum: 1}
}
}])
/*法二*/
db.students.aggregate([
{
$group: {
_id: "$sex",
"年龄大于19的人数": {
$sum: {
$cond: [
{$gt: ["$age", 19]},
1,
0
]
}
}
}
}])