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
  • 相关阅读:
    关于学习Knockoutjs--入门(一)
    h5移动端前端性能优化
    VS2015常用快捷键总结
    51nod1196 字符串的数量
    51nod1189 阶乘分数
    51nod1161 Partial Sums
    51nod1040 矩阵相乘结果的判断
    51nod 1125 交换机器的最小代价
    51nod 1120 机器人走方格 V3
    51nod 1040 最大公约数之和
  • 原文地址:https://www.cnblogs.com/thlzhf/p/3407492.html
Copyright © 2011-2022 走看看