zoukankan      html  css  js  c++  java
  • 分组汇总 with rollup和with cube和compute by 和排名函数

    retmxls-- 商品销售明细表

    rq--日期

    spid--商品信息

    sshje--每笔销售记录的金额

    select spid,rq, sum(sshje) from retmxls group by rq,spid with ROLLUP order by spid

    根据group by 后的第一个字段进行分组,我这里的是rq,那就是同日期的为一组,并在这一组完的最后一行插入一个空行,显示这个组的sshje 的汇总


    select spid,rq, sum(sshje) from retmxls group by spid,rq with cube order by spid

    根据group by 后的每一个字段进行分组,并在这一组完的最后一行插入一个空行,显示这个组的sshje 的汇总

    下图的结果中有2026.6这个是2005-05-01这个日期的所有商品的汇总额,而4702.58是整个表的所有商品所

    有日期的总汇总,而206.66是SPH10000002在所有天的汇总。


    select spid,rq,sshje from retmxls order by rq compute sum(sshje)

    对compute 后的sum字段进行汇总,返回明细和一个汇总两个结果

    select spid,rq,sshje from retmxls order by rq compute sum(sshje) by (rq)

     对compute 后的sum字段进行汇总,对by后的字段进行分组,返回由日期分组后的每个明细和每个汇总的多个结果

     

    下面再说几个比较有用的排名函数(RANK ()NTILE (integer_expression)row_number() DENSE_RANK

    1RANK ()

    语法

    RANK ( )    OVER ( [ < partition_by_clause > ] < order_by_clause > )

    参数

    < partition_by_clause>

    FROM 子句生成的结果集划分成 RANK 函数适用的分区。若要了解 PARTITION BY 语法,请参阅 OVER 子句 (Transact-SQL)

    < order_by_clause>

    确定将 RANK 值应用于分区中的行时所基于的顺序。有关详细信息,请参阅 ORDER BY 子句 (Transact-SQL)。当在排名函数中使用 <order_by_clause> 时,不能用整数表示列。

    示列:select rank () over(PARTITION BY sshje order by spid) as r,spid,sshje from retmxls结果生成以sshje分区,按spid排序的序号,返回结果同一spid序号一样,下一序号从实际行号开 始。而不是上一序号加1

    也可以select rank () over(order by spid) as r,spid,sshje from retmxls

    返回结果同一spid序号一样,下一序号从实际行号开 始。而不是上一序号加1

     

    2NTILE (integer_expression)

    语法

    NTILE (integer_expression)    OVER ( [ <partition_by_clause> ] < order_by_clause > )

    参数

    integer_expression

    一个正整数常量表达式,用于指定每个分区必须被划分成的组数。

    integer_expression 的类型可以为 int bigint

     

    <partition_by_clause>

    FROM 子句生成的结果集划分成 RANK 函数适用的分区。

    < order_by_clause>

    确定 NTILE 值分配到分区中各行的顺序。有关详细信息,请参阅 ORDER BY 子句 (Transact-SQL)。当在排名函数中使用 <order_by_clause> 时,不能用整数表示列。

    示列:select NTILE (4) over(PARTITION BY sshje order by spid) as r,spid,sshje from retmxls

    根据sshje进行分区,按照spid进行排序,把每个分区分成4

    也可以select NTILE (4) over(order by spid) as r,spid,sshje from retmxls

    将整个结果分成四份

    3DENSE_RANK ( )  

    语法

     

    DENSE_RANK ( )    OVER ( [ < partition_by_clause > ] < order_by_clause > )

    参数

    < partition_by_clause>

    FROM 子句生成的结果集划分为数个应用 DENSE_RANK 函数的分区。若要了解 PARTITION BY 语法,请参阅 OVER 子句 (Transact-SQL)

    < order_by_clause>

    确定将 DENSE_RANK 值应用于分区中各行的顺序。整数不能表示排名函数中使用的 <order_by_clause> 中的列。

    示列:select DENSE_RANK() over( order by spid) as r,spid,sshje from retmxls

    返回结果同NTILE的区别是他的下一区的序号是上一 区的数值加1而不是实际的行数。

    select DENSE_RANK() over(PARTITION BY sshje order by spid) as r,spid,sshje from retmxls

    生成结果根据sshje分区,spid排序,生成序号,序号是连续的顺序

    4row_number()

    语法

     

    ROW_NUMBER ( )     OVER ( [ <partition_by_clause> ] <order_by_clause> )

    参数

    <partition_by_clause>

    FROM 子句生成的结果集划入应用了 ROW_NUMBER 函数的分区。若要了解 PARTITION BY 语法,请参阅 OVER 子句 (Transact-SQL)

    <order_by_clause>

    确定将 ROW_NUMBER 值分配给分区中的行的顺序。有关详细信息,请参阅 ORDER BY 子句 (Transact-SQL)。当在排名函数中使用 <order_by_clause> 时,不能用整数表示列。

    示列:select row_number() over(order by spid) as r,spid,sshje from retmxls

    生成结果,以spid排序,生成连续的序号。和标识种 子类似

    select row_number() over(PARTITION BY sshje order by spid) as r,spid,sshje from retmxls

    生成以sshje分区的序号,每个分区从1开始

  • 相关阅读:
    Navicat 安装教程
    office 2016 安装教程
    PyCharm 2018.1.1软件安装教程
    Pytorch学习笔记02----深度学习中的epochs,batch_size,iterations详解
    Anaconda 安装步骤
    Python基础汇总001_txt文件读写、字典使用等
    Pytorch学习笔记01----pytorch框架介绍
    es6的学习
    vue的使用与安装 npm -v报错
    js弹窗返回值详解(window.open方式)
  • 原文地址:https://www.cnblogs.com/zhangxz/p/1909329.html
Copyright © 2011-2022 走看看