zoukankan      html  css  js  c++  java
  • 关于Sqlserver窗口函数over的用法

    个人觉得,sqlserver在2005以后推出窗口函数 Over完全是一个创举,他让很多的复杂的问题变得简单了。

    既然是用法,我就不说明其他的东西,举一些例子就好了:

    create table OverTableTest
    (
    	id int identity(1,1),--ID
    	Val int, --值
    	typ int, --类型
    )
    go
    declare @cou int
    set @cou=1
    while @cou<50
    begin
    	insert into OverTableTest 
    		select @cou,@cou%5+1 
    	
    	set @cou=@cou+1
    end
    go
    
    select * from OverTableTest
    /*
    	通常我们会用到的是情景是:分页(row_Number)
    	示例:
    */
    ;with mycte as
    (
    	select row=ROW_NUMBER() over (order by id desc) ,* from
    	OverTableTest
    )select * from mycte where row BETWEEN 10 and 20
    /*
    	在上面的情况下我经常用到,
    	但是却一直没有追问 Over到底是做什么用的啊
    */
    /*
    	应用环境2 分组获取前几名
    	就好像,考试了,要获取每科排名前3的同学
    	SQL:
    */
    ;with mycte as
    (
    	select row=ROW_NUMBER() over (partition by typ order by val desc) ,* from
    	OverTableTest
    )select * from mycte where row<=3
    /*
    	在这个示例中 加上了partition by 就是进行分组统计了
    	我们再来进行第三个示例:
    	按照类别获取 类别数量,同时按照类别数量最多的排序
    */
    select Cunt=count(0) over(partition by typ) ,* from
    	OverTableTest  order by Cunt desc,typ,id 
    -----------------------------------------------------------------
    /*
    	今天例子就说到这里了,运行结果 大家复制直接执行就好了
    */


  • 相关阅读:
    团队项目前期冲刺-6
    《人月神话》阅读笔记02
    4.25软件工程课下作业
    团队项目前期冲刺-5
    element-UI table封装
    local storage
    去除2个数组中不同的数字
    vue.config.js常用配置
    工作中使用的一些技巧总结【后续持续性更新】
    MockJs
  • 原文地址:https://www.cnblogs.com/dingdingmao/p/3146474.html
Copyright © 2011-2022 走看看