`
cui09
  • 浏览: 115415 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
最近访客 更多访客>>
社区版块
存档分类
最新评论

关于group by的深入理解(扩展到rollup,增强groupby,主要用于小计)

阅读更多

当我们选不只一个栏位,且其中至少一个栏位有包含函数的运用时,我们就要用到group by这个指令。在这个情况下。
我们需要确定我们有group by所有其他的栏位。换句话说。除了包括函数的栏位外。我们都要将其放在group by子名。

msdn中这样解释:

指定用来放置输出行的组。如果 SELECT 子句 <select list> 中包含聚合函数,则 GROUP BY 将计算每组的汇总值。指定 GROUP BY 时,选择列表中任意非聚合表达式内的所有列都应包含在 GROUP BY 列表中,或者 GROUP BY 表达式必须与选择列表表达式完全匹配。

使用 ROLLUP 汇总数据 

在生成包含小计和合计的报表时,ROLLUP 运算符很有用。ROLLUP 运算符生成的结果集类似于 CUBE 运算符生成的结果集。


使用 ROLLUP 汇总数据 

在生成包含小计和合计的报表时,ROLLUP 运算符很有用。ROLLUP 运算符生成的结果集类似于 CUBE 运算符生成的结果集。有关详细信息,请参阅使用 CUBE 汇总数据。

下面是 CUBE 和 ROLLUP 之间的具体区别:

CUBE 生成的结果集显示了所选列中值的所有组合的聚合。

ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。

例如,简单表 Inventory 包含下列数据:

Item                 Color                Quantity                  
-------------------- -------------------- --------------------------
Table                Blue                 124                       
Table                Red                  223                       
Chair                Blue                 101                       
Chair                Red                  210                       

以下查询将生成小计报表:

SELECT CASE WHEN (GROUPING(Item) = 1) THEN 'ALL'
            ELSE ISNULL(Item, 'UNKNOWN')
       END AS Item,
       CASE WHEN (GROUPING(Color) = 1) THEN 'ALL'
            ELSE ISNULL(Color, 'UNKNOWN')
       END AS Color,
       SUM(Quantity) AS QtySum
FROM Inventory
GROUP BY Item, Color WITH ROLLUP

Item                 Color                QtySum                    
-------------------- -------------------- --------------------------
Chair                Blue                 101.00                    
Chair                Red                  210.00                    
Chair                ALL                  311.00                    
Table                Blue                 124.00                    
Table                Red                  223.00                    
Table                ALL                  347.00                    
ALL                  ALL                  658.00                    

(7 row(s) affected)

如果将查询中的 ROLLUP 关键字更改为 CUBE,那么 CUBE 结果集保持不变,只是在末尾还会返回下列两行:

ALL                  Blue                 225.00                    
ALL                  Red                  433.00                    

CUBE 操作为 Item 和 Color 中值的可能组合生成行。例如,CUBE 不仅报告 Color 值与 Item 值 Chair(Red、Blue 和 Red + Blue)的所有可能组合,还报告 Item 值与 Color 值 Red(Chair、Table 和 Chair + Table)的所有可能组合。

对于 GROUP BY 子句的右列中的每个值,ROLLUP 操作并不报告左列中各值的所有可能组合。例如,ROLLUP 并不报告每个 Color 值的 Item 值的所有可能组合。

ROLLUP 操作的结果集与 COMPUTE BY 返回的结果集具有类似的功能。然而,ROLLUP 具有下列优点:

ROLLUP 返回单个结果集,而 COMPUTE BY 返回多个结果集,而多个结果集会增加应用程序代码的复杂性。

ROLLUP 可以在服务器游标中使用,而 COMPUTE BY 则不可以。

有时,查询优化器为 ROLLUP 生成的执行计划比为 COMPUTE BY 生成的更为高效。

分享到:
评论

相关推荐

    SQL语句中Group BY 和Rollup以及cube用法

    ### SQL语句中Group BY 和Rollup以及...通过以上示例和解释,我们可以更好地理解SQL中`GROUP BY`、`ROLLUP`和`CUBE`的作用和用法。在实际工作中,根据需求选择合适的分组方式能够有效地提高数据处理的效率和灵活性。

    group by分组函数之rollup与cube用法1

    在SQL查询中,GROUP BY语句用于将数据按指定列进行分组,以便对每组进行聚合计算,如求和、平均值等。而在GROUP BY的基础上,Oracle数据库提供了两种高级分组功能:ROLLUP和CUBE,它们允许我们更灵活地生成汇总数据...

    ROLLUP的数据统计效果

    在数据库管理领域,`ROLLUP` 是一种用于生成汇总数据的SQL构造,它在多级分组时非常有用,能够自动生成从最细粒度到最粗粒度的各种汇总。`ROLLUP` 常常与`GROUP BY` 语句结合使用,提供了一种简便的方式来创建数据...

    Oracle ROLLUP和CUBE 用法

    ROLLUP操作是GROUP BY的一个扩展,它允许你生成一个包含不同层次的分组结果,从最细粒度的分组到最粗粒度的分组,类似于数据透视表的逐级展开。例如,如果你有一个按地区、城市和部门分组的数据集,使用ROLLUP可以...

    sql rollup用法 小计汇总

    SQL中的ROLLUP操作是用于创建多级汇总的一种方法,它在Oracle和SQL Server等数据库管理系统中都得到了广泛的应用...通过对GROUP BY语句的扩展,ROLLUP简化了数据分析和报告的创建过程,使得数据库查询更加灵活和高效。

    oracle中聚合函数的扩展使用(ROLLUP CUBE、GROUPING()函数与ROLLUP、CUBE的结合使用等)

    ROLLUP是GROUP BY子句的增强版本,它会按照指定的列顺序逐级向上进行分组,生成汇总数据。例如,如果我们有一个包含部门(DIVISION)、职位(JOB_ID)和薪水(SALARY)的数据表,使用ROLLUP可以计算出每个部门的总...

    总结下sqlserver group by 的用法

    在SQL Server中,`GROUP BY`语句是一个用于聚合数据的关键子句,它允许我们将数据分组,并对每个组执行聚合函数(如`COUNT`, `SUM`, `AVG`, `MAX`, `MIN`等)。在数据库查询中,当你需要根据某个或多个列的值对数据...

    grouping 解释及演示.rar

    当我们谈论`WITH CUBE`、`WITH ROLLUP`和`GROUPING`,这些都是在多维数据分析中用于扩展`GROUP BY`功能的高级聚合技术。它们提供了更灵活的数据汇总方式,帮助用户从不同角度查看数据。 首先,让我们深入理解`GROUP...

    rollup cube grouping sets的用法

    `ROLLUP` 是一个扩展了 `GROUP BY` 功能的关键字,它可以生成一个由多个级别的汇总信息组成的层次结构。`ROLLUP` 可以帮助我们创建一系列部分汇总及总计的组合结果集。 **基本语法:** ```sql SELECT column1, ...

    第08章_聚合函数3

    在SQL中,聚合函数是处理数据集合的一种重要方式,它们能够对一组数据进行总结并返回一个...理解何时使用COUNT(*)、COUNT(1)以及COUNT(列名),以及何时结合GROUP BY和HAVING子句,都是提高SQL查询效率和准确性的关键。

    Sql学习第四天——SQL 关于with cube,with rollup和grouping解释及演示

    在SQL查询中,`WITH CUBE` 和 `WITH ROLLUP` 是两种高级的聚合功能,它们用于扩展`GROUP BY`语句的功能,提供更复杂的分组和汇总数据的能力。这两种方法都涉及到多维数据分析的概念,尤其是在处理大量数据时非常有用...

    TSQL 分组集1

    2. `GROUP BY ROLLUP(a, b)` 提供了预定义的分组集,包括所有可能的子集,如 `(a, b)`, `(a)`, `(b)`, `()`(空集)。 3. `GROUP BY CUBE(a, b)` 同样预定义了分组集,但包括所有可能的子集和全集,如 `(a, b)`, `(a...

    数据查询P2.rar

    `CUBE`和`ROLLUP`是扩展`GROUP BY`的功能,用于生成多维汇总数据。`CUBE`生成所有可能的组合,而`ROLLUP`则生成一种类似“逐步汇总”的效果,从最细粒度到最粗粒度的级别。 3. **使用`GROUP BY`进行分类汇总**: `...

    T-sql简单介绍

    ### GROUP BY 与 CUBE、ROLLUP 的使用 #### GROUP BY `GROUP BY` 子句用于将数据分组以便进行聚合操作。例如,可以按客户ID分组并计算每个客户的总支付额。 ```sql SELECT cust_id, SUM(pay1) AS pay11 FROM pay_...

    SQLServer数据库复杂查询示例

    这些是高级的GROUP BY扩展,用于生成多级汇总数据。ROLLUP生成上卷(coarser)级别的汇总,CUBE生成所有可能的组合,GROUPING SETS则允许自定义组合,提供了更灵活的分组控制。 6. **窗口函数**: 窗口函数在选定...

    oracle函数

    GROUP BY 语句的扩展,ROLLUP 和 CUBE 提供了多级分组的功能。 1. ROLLUP:生成所有可能的子集组合,从最细粒度的分组到最粗粒度的全表分组。例如,GROUP BY ROLLUP(A, B, C)会生成(A,B,C), (A,B), (A), 和 ()的...

    Oracle 10g培训经典_中文版

    - Les17_对 GROUP BY 子句的扩展.ppt可能深入讨论了GROUP BY的高级用法,如HAVING子句和ROLLUP/CUBE/GROUPING SETS。 通过这套培训资料,学习者可以从基础的SQL语法到复杂的数据库管理技巧逐步进阶,了解并掌握...

    数据库复习题2答案.doc

    `GROUP BY ROLLUP`和`GROUP BY CUBE`都是SQL中用于多级分组的方法,用于生成不同级别的汇总数据。 - `GROUP BY ROLLUP`(building, room number, time_slot_id)会产生所有可能的子集,从完整的三元组到每个单独...

    《MySQL数据库开发》期末复习题.pdf

    选择题部分涉及了MySQL的连接语法、版本查询、语句结束符设置、提示符设置、导入SQL脚本、SELECT语句用法、ENUM排序、LIMIT分页、GROUP_CONCAT函数、WITH ROLLUP扩展、SQL模式查询、数据处理模式(非严格和严格)...

    辛星笔记之MySQL优化篇

    `WITH ROLLUP`用于`GROUP BY`子句中,提供了额外的汇总行,可以用来实现更复杂的统计分析。 3. 锁问题:数据库锁是数据库管理系统用来同步多个事务,防止多个事务同时读写同一数据,从而保证数据的一致性和完整性的...

Global site tag (gtag.js) - Google Analytics