zoukankan      html  css  js  c++  java
  • T-SQL基础(2)

    开窗函数over

    select orderid, custid, val,
    SUM(val) over() as totalvalue,
    SUM(val) over(partition by custid) as custtotalvalue
    from Sales.OrderValues
    
    select orderid, custid, val,
    100. * val / SUM(val) over() as pctall,
    100. * val / SUM(val) over(partition by custid) as pctcust
    from Sales.OrderValues

    over 子句也支持四种排名函数:row_number, rank, dense_rank and ntile

    select orderid, custid, val,
      row_number() over(order by val) as rownum,
      rank() over(order by val) as rank,
      dense_rank() over(order by val) as dense_rank,
      ntile(10) over(order by val) as ntile --分为10组,显示当前行所在的组号
    from Sales.OrderValues
    order by val;
    
    select orderid, custid, val,
    row_number() over(partition by custid order by val) as rownum
    from Sales.OrderValues
    order by custid, val;

    如果在select处理阶段指定了开窗函数,开窗函数必须在distinct子句(如果存在)之前进行处理。
    OrderValues视图目前有830行,795个不同的val值。

    select distinct val, ROW_NUMBER() over(order by val) as rownum
    from Sales.OrderValues
    --返回830 rows
    
    select distinct val from Sales.OrderValues
    --返回795 rows

    可以认为在同一select子句中不同时指定distinct和row_number是一条最佳实践原则,因为distinct子句在这种情况下不起任何作用。可以使用group by为795个唯一值分配行号。

    select val, ROW_NUMBER() over(order by val) as rownum
    from Sales.OrderValues group by val;

    select 各子句处理顺序

    from
    where
    group by
    having
    select
      over 
      distinct
      top
    order by
  • 相关阅读:
    嵌入式入门 -第1章 学嵌入式从STM32开始
    如何学习Java
    如何学习嵌入式linux
    Linux OR windows 的启动全过程详解
    Makefile 易忘规则记录
    Makefile中的自动化变量
    Makefile中的文件名操作函数
    Makefile中的字符串处理函数
    关于错误"ftok: No such file or directory"
    linux查看yuv图像
  • 原文地址:https://www.cnblogs.com/thlzhf/p/3407492.html
Copyright © 2011-2022 走看看