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

  • 相关阅读:
    Ubuntu 16 安装redis客户端
    crontab 参数详解
    PHP模拟登录发送闪存
    Nginx配置端口访问的网站
    Linux 增加对外开放的端口
    Linux 实用指令之查看端口开启情况
    无敌的极路由
    不同的域名可以指向同一个项目
    MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error
    Redis 创建多个端口
  • 原文地址:https://www.cnblogs.com/zhaoshujie/p/9594717.html
Copyright © 2011-2022 走看看