學生表A有兩個字段,Id,Name,成績表B有四個字段,Id,StudentId,Score,SubjuectType,其中StudentId對應A中Id,SubjuectType表示科目。
1.請用一句sql語句取出各科的平均成績,顯示字段,科目,平均成績
select SubjectType,AVG(Score)as AvgScore from StuScore group by SubjectType
2.請使用一句SQL,獲取平均成績在80分以上的所有學生信息,顯示字段:學生ID,姓名,平均成績
select Students.Id,Students.Name,AVG(StuScore.Score)as AvgScore from Students join StuScore
on Students.Id=StuScore.StudentId group by Students.Id,Students.Name having AVG(StuScore.Score)>80
擴展:
在.net中實現:
class Program { static void Main(string[] args) { var students = new List<Student> { new Student { Id = "1", Name = "張三"}, new Student { Id = "2", Name = "李四"}, new Student { Id = "3", Name = "趙五"}, }; var stuscores = new List<StuScore> { new StuScore { Id = "1", StudentId = "1",Score=80.5,SubjuectType="語文"}, new StuScore { Id = "2", StudentId = "2",Score=79.5,SubjuectType="語文"}, new StuScore { Id = "3", StudentId = "3",Score=80.0,SubjuectType="語文"}, new StuScore { Id = "4", StudentId = "1",Score=79.5,SubjuectType="數學"}, new StuScore { Id = "5", StudentId = "2",Score=80.5,SubjuectType="數學"}, new StuScore { Id = "6", StudentId = "3",Score=80.3,SubjuectType="數學"}, }; //拼接表 var list = students.Join(stuscores, a => a.Id, b => b.StudentId, (a, b) => new { a, b }); foreach (var item in list) { Console.WriteLine(" 學生姓名:{0},科目:{1},分數:{2}", item.a.Name,item.b.SubjuectType,item.b.Score); } //取出各科的平均成績,顯示字段,科目,平均成績 var avgscorelist = stuscores.GroupBy(a=>a.SubjuectType).Select(b=> new { SubjuectType= b.Key, Average = b.Average(c => c.Score) }); foreach (var item in avgscorelist) { Console.WriteLine("科目:{0},平均分:{1}", item.SubjuectType, item.Average); } //獲取平均成績在80分以上的所有學生信息,顯示字段:學生ID,姓名,平均成績 List<AvgStuScore> avgstulist = new List<AvgStuScore>(); foreach (var item in students) { AvgStuScore assmodel = new AvgStuScore(); assmodel.Id = item.Id; assmodel.Name = item.Name; var mylist=stuscores.Where(a => a.StudentId == item.Id); double totalscore = 0; foreach (var myitem in mylist) { totalscore += myitem.Score; } if(mylist.Count()!=0) { assmodel.AvgScore = totalscore / mylist.Count(); } else { assmodel.AvgScore = 0; } avgstulist.Add(assmodel); } foreach (var item in avgstulist.Where(a=>a.AvgScore>80).OrderBy(a=>a.Id)) { Console.WriteLine("學生ID:{0},姓名:{1},平均分:{2}", item.Id, item.Name,item.AvgScore); } Console.ReadKey(); } /// <summary> /// 學生表 /// </summary> public class Student { public string Id { get;set;} public string Name{ get; set;} } /// <summary> /// 學生成績表 /// </summary> public class StuScore { public string Id { get; set; } public string StudentId { get; set; } public double Score { get; set; } public string SubjuectType { get; set; } } /// <summary> /// 學生平均成績視圖類 /// </summary> public class AvgStuScore { public string Id { get; set; } public string Name { get; set; } public double AvgScore { get; set; } } }