• 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

  • 相关阅读:
    vi/vim 文字处理器常用命令
    图片在容器里水平垂直居中
    谁的属性值优先被访问
    创建对象和实例
    碎碎念css
    未整理js
    表格<table>
    盒子模型
    Css文件目录结构
    链接文字<a>保持原有的字体颜色
  • 原文地址:https://www.cnblogs.com/zhaoshujie/p/9594717.html
Copyright © 2020-2023  润新知