zoukankan      html  css  js  c++  java
  • SQL Server

    -- 开窗函数:在结果集的基础上进一步处理(聚合操作)
    
    SELECT * FROM dbo.Student
    
    S#         Sname      Sage                    Ssex
    ---------- ---------- ----------------------- ----------
    01         赵雷         1990-01-01 00:00:00.00002         钱电         1990-12-21 00:00:00.00003         孙风         1990-05-20 00:00:00.00004         李云         1990-08-06 00:00:00.00005         周梅         1991-12-01 00:00:00.00006         吴兰         1992-03-01 00:00:00.00007         郑竹         1989-07-01 00:00:00.00008         王菊         1990-01-20 00:00:00.000-- Over函数,添加一个字段显示最大年龄
    SELECT *,MAX(DATEDIFF(yyyy,Sage,GETDATE()))OVER() MaxSage FROM dbo.Student
    
    S#         Sname      Sage                    Ssex       MaxSage
    ---------- ---------- ----------------------- ---------- -----------
    01         赵雷         1990-01-01 00:00:00.00028
    02         钱电         1990-12-21 00:00:00.00028
    03         孙风         1990-05-20 00:00:00.00028
    04         李云         1990-08-06 00:00:00.00028
    05         周梅         1991-12-01 00:00:00.00028
    06         吴兰         1992-03-01 00:00:00.00028
    07         郑竹         1989-07-01 00:00:00.00028
    08         王菊         1990-01-20 00:00:00.00028
     
    -- Over函数,添加一个字段显示总人数
    SELECT *,COUNT(S#)OVER() 总人数 FROM dbo.Student
    
    S#         Sname      Sage                    Ssex       总人数
    ---------- ---------- ----------------------- ---------- -----------
    01         赵雷         1990-01-01 00:00:00.0008
    02         钱电         1990-12-21 00:00:00.0008
    03         孙风         1990-05-20 00:00:00.0008
    04         李云         1990-08-06 00:00:00.0008
    05         周梅         1991-12-01 00:00:00.0008
    06         吴兰         1992-03-01 00:00:00.0008
    07         郑竹         1989-07-01 00:00:00.0008
    08         王菊         1990-01-20 00:00:00.0008
     
    -- Partition By 分组统计数量
    -- 根据性别分组后,统计
    SELECT *,COUNT(*) OVER(PARTITION BY Ssex) 总数 FROM dbo.Student
    
    S#         Sname      Sage                    Ssex       总数
    ---------- ---------- ----------------------- ---------- -----------
    01         赵雷         1990-01-01 00:00:00.0004
    02         钱电         1990-12-21 00:00:00.0004
    03         孙风         1990-05-20 00:00:00.0004
    04         李云         1990-08-06 00:00:00.0004
    05         周梅         1991-12-01 00:00:00.0004
    06         吴兰         1992-03-01 00:00:00.0004
    07         郑竹         1989-07-01 00:00:00.0004
    08         王菊         1990-01-20 00:00:00.0004
     
    -- 根据性别分组后,统计、排序
    SELECT *,COUNT(*) OVER(PARTITION BY Ssex ORDER BY Sname) 序号 FROM dbo.Student
    
    S#         Sname      Sage                    Ssex       序号
    ---------- ---------- ----------------------- ---------- -----------
    04         李云         1990-08-06 00:00:00.0001
    02         钱电         1990-12-21 00:00:00.0002
    03         孙风         1990-05-20 00:00:00.0003
    01         赵雷         1990-01-01 00:00:00.0004
    08         王菊         1990-01-20 00:00:00.0001
    06         吴兰         1992-03-01 00:00:00.0002
    07         郑竹         1989-07-01 00:00:00.0003
    05         周梅         1991-12-01 00:00:00.0004
     
    -- Over函数,添加一个字段显示平均年龄
    SELECT *,AVG(DATEDIFF(yyyy,Sage,GETDATE()))OVER() 平均年龄 FROM dbo.Student
    
    S#         Sname      Sage                    Ssex       平均年龄
    ---------- ---------- ----------------------- ---------- -----------
    01         赵雷         1990-01-01 00:00:00.00026
    02         钱电         1990-12-21 00:00:00.00026
    03         孙风         1990-05-20 00:00:00.00026
    04         李云         1990-08-06 00:00:00.00026
    05         周梅         1991-12-01 00:00:00.00026
    06         吴兰         1992-03-01 00:00:00.00026
    07         郑竹         1989-07-01 00:00:00.00026
    08         王菊         1990-01-20 00:00:00.00026
     
    --Row_Rumber()
    SELECT *,ROW_NUMBER()OVER(ORDER BY S# DESC) 序号 FROM dbo.Student
    
    S#         Sname      Sage                    Ssex       序号
    ---------- ---------- ----------------------- ---------- --------------------
    08         王菊         1990-01-20 00:00:00.0001
    07         郑竹         1989-07-01 00:00:00.0002
    06         吴兰         1992-03-01 00:00:00.0003
    05         周梅         1991-12-01 00:00:00.0004
    04         李云         1990-08-06 00:00:00.0005
    03         孙风         1990-05-20 00:00:00.0006
    02         钱电         1990-12-21 00:00:00.0007
    01         赵雷         1990-01-01 00:00:00.0008
     
    --Row_Rumber() 实现分页效果
    WITH T AS ( 
        SELECT ROW_NUMBER() OVER ( ORDER BY S# DESC ) RowNumber ,*
        FROM dbo.Student
    )
    SELECT * FROM T WHERE T.RowNumber BETWEEN 1 AND 3
    
    RowNumber            S#         Sname      Sage                    Ssex
    -------------------- ---------- ---------- ----------------------- ----------
    1                    08         王菊         1990-01-20 00:00:00.0002                    07         郑竹         1989-07-01 00:00:00.0003                    06         吴兰         1992-03-01 00:00:00.000--Rank() 排名函数,名次相同,跳过
    SELECT *,RANK()OVER(ORDER BY Ssex) 名次 FROM dbo.Student
    S#         Sname      Sage                    Ssex       名次
    ---------- ---------- ----------------------- ---------- --------------------
    01         赵雷         1990-01-01 00:00:00.0001
    02         钱电         1990-12-21 00:00:00.0001
    03         孙风         1990-05-20 00:00:00.0001
    04         李云         1990-08-06 00:00:00.0001
    05         周梅         1991-12-01 00:00:00.0005
    06         吴兰         1992-03-01 00:00:00.0005
    07         郑竹         1989-07-01 00:00:00.0005
    08         王菊         1990-01-20 00:00:00.0005
     
    --DENSE_Rank() 排名函数,名次相同不跳过
    SELECT *,DENSE_RANK()OVER(ORDER BY Ssex) 名次 FROM dbo.Student
    
    S#         Sname      Sage                    Ssex       名次
    ---------- ---------- ----------------------- ---------- --------------------
    01         赵雷         1990-01-01 00:00:00.0001
    02         钱电         1990-12-21 00:00:00.0001
    03         孙风         1990-05-20 00:00:00.0001
    04         李云         1990-08-06 00:00:00.0001
    05         周梅         1991-12-01 00:00:00.0002
    06         吴兰         1992-03-01 00:00:00.0002
    07         郑竹         1989-07-01 00:00:00.0002
    08         王菊         1990-01-20 00:00:00.0002
     
    -- NTILE()函数,参数:记录总数/划分区域 = 每个区域数组,把记录序号放进数组 (平均分组)
    SELECT *,NTILE(3)OVER(ORDER BY Ssex) 区域 FROM dbo.Student
    
    S#         Sname      Sage                    Ssex       区域
    ---------- ---------- ----------------------- ---------- --------------------
    01         赵雷         1990-01-01 00:00:00.0001
    02         钱电         1990-12-21 00:00:00.0001
    03         孙风         1990-05-20 00:00:00.0001
    04         李云         1990-08-06 00:00:00.0002
    05         周梅         1991-12-01 00:00:00.0002
    06         吴兰         1992-03-01 00:00:00.0002
    07         郑竹         1989-07-01 00:00:00.0003
    08         王菊         1990-01-20 00:00:00.0003

  • 相关阅读:
    问题.NET--win7 IIS唯一密钥属性“VALUE”设置为“DEFAULT.ASPX”时,无法添加类型为“add”的重复集合
    java传统web项目添加maven管理jar包,log4j无法正常输出日志
    TortoiseSVN设置Beyond Compare为版本比较、差异合并工具
    Win10以管理员身份启动cmd.exe
    SprinMVC中文件上传只在内存保留一份拷贝
    maven项目运行报错invalid LOC header (bad signature)
    c#编写windows服务在开机是OnStart启动超时
    centos安装mysql
    CENTOS7配置静态IP
    @__CheckForDebuggerJustMyCode@4
  • 原文地址:https://www.cnblogs.com/zhaoshujie/p/9594717.html
Copyright © 2011-2022 走看看