createtableStudent--学生成绩表( id int, --主键 Grade int, --班级 Score int--分数);insert into Student values(1,1,88); insert into Student values(2,1,66); insert into Student values(3,1,75); insert into Student values(4,2,30); insert into Student values(5,2,70); insert into Student values(6,2,80); insert into Student values(7,2,60); insert into Student values(8,3,90); insert into Student values(9,3,70); insert into Student values(10,3,80); insert into Student values(11,3,80)
一:如果我们想要一个输出每个学生成绩名次的结果,就可以使用row_number() 方法,配合排序
select*,row_number() over(order by Score desc) asSequencefrom Student
二:如果我们想要对每个年级的学生的名词分别计算,那就要使用到partition by方法
select*,row_number() over(partitionby Grade order by Score desc) asSequencefrom Student
接下来,我们还可以利用上述结果进行二次筛选,比如获取每个年级第一名
select*from (select*,row_number() over(partitionby Grade order by Score desc) asSequencefrom Student ) T where T.Sequence<=1
select*,rank() over(partitionby Grade order by Score desc) asSequencefrom Student;
此时,我们再获取每个年级前2名,就可以取出分数并列第二名的同学
select*from (select*,rank() over(partitionby Grade order by Score desc) asSequencefrom Student ) T where T.Sequence<=2
注意事项 PARTITION BY 子句中的列应仔细选择,因为它们会影响查询的性能。 如果不需要分区,可以省略 PARTITION BY 子句,此时窗口函数将在整个结果集上应用。 可以结合多个列进行分区,例如 PARTITION BY Grade。 通过使用 PARTITION BY,你可以更灵活和高效地进行数据分析和处理,尤其是在处理大型数据集时。
一:首先,我们创建好项目的文件夹,然后进入文件夹,创建一个web的应用程序,具体用到的命令是“dotnet new”,dotnet new – 根据指定的模板,创建新的项目、配置文件或解决方案。常用的有类库“classlib”、控制台应用程序“console”、WebAPI应用“webapi”、ASP.NET Core Web 应用程序“webapp”
using(var context =new MySqlTestDBContext()){var blog =new Blog {Url="http://example.com"};var Id =context.Blogs.Add(blog).Entity.Id;context.SaveChanges();}