GROUP BY

忘是亡心i 2022-10-01 00:49 224阅读 0赞
  1. 常规GROUP BY 后的子句包括 GROUPING SETSCUBEROLLUP
  2. 这三个运算符可以生成与使用 UNION ALL 来组合单个分组查询时相同的结果集;但是使用者其中一种更有效。
  3. GROUPING SETS: 在一个查询中指定数据的多个分组。仅聚合指定分组,而不聚合由CUBEROLLUP生成的整组聚合。其结果与针对指定的租执行UNION ALL运算等效。GROUPING SETS 可以包括单个元素或元素列表,也可以指定与ROLLUP CUBE 返回的内容等效的分组。 它可以生成与使用单个 GROUP BY ROLLUPCUBE 运算符所生成的结果集相同的结果集。如果不需要获得由完备的ROLLUPCUBE运算符生成的全部分组,则可以使用GROUPING SETS仅指定所需的分组即可。GROUPING SETS 列表可以包含重复的分组;它 ROLLUPCUBE一起使用时,就有可能生成重复的分组。使用UNION ALL 可以原样保留重复的分组。
  4. ROLLUP:生成简单的GROUP BY 聚合行以及小计行或超聚合行,同时还生成一个总计行。列是按照从右到左的顺序汇总的。列的顺序会影响ROLLUP的输出分组,而且可能影响结果集内的行数。
  5. CUBE:生成简单的GROUP BY聚合行、ROLLUP超聚合行和交叉表格行。列的顺序不影响CUBE的输出结果。
  6. CUBE ROLLUP 不支持非重复的聚合。例如:COUNT(DISTINCT USERID)、AVG(DISTINCT column_name).
  7. 不能在索引视图中指定 CUBE ROLLUP GROUPING SETS
  8. GROUP BY 子句中不允许使用 GROUPING SETS ,除非它们是GROUPING SETS列表的一部分 例如:
  9. GROUP BY column1,(column2,column3)是错误的。但是可以是 GROUP BY GROUPING SETS (column1,(column2,column3))
  10. GROUPING SETS 内部不能使用 GROUPING SETS
  11. GROUPING
  12. 表示是否聚合GROUP BY 列表中的指定列表达式。在结果集中,如果GROUPING 返回1 则表示聚合,返回0 则表示不聚合。 如果指定了 GROUP BY ,则GROUPING 只能在 SELECT 列表、HAVINGORDER BY子句中。
  13. GROUPING 还用于区分标准空值和由 CUBEROLLUPGROUPING SETS 返回的值。作为CUBEROLLUPGROUPING SETS 操作结果返回的NULL NULL 的特殊应用。它在结果集内作为列的占位符,表示全体。
  14. 例如:
  15. SELECT USERID,SUM(Quantiy)as qty,GROUPING(USERID) AS USERID_GROUP
  16. FROM TAB GROUP BY USERID WITH ROLLUP[CUBE];
  17. 整理自 联机丛书
  18. 举例:
  19. if object_id('[test]') is not null drop table [test]
  20. create table [test]([品名] varchar(10),[数量] int)
  21. insert [test]
  22. select 'A',1 union all
  23. select 'A',2 union all
  24. select 'A',2 union all
  25. select 'B',2 union all
  26. select 'B',1 union all
  27. select 'B',3
  28. select [品名],[数量] from [test]
  29. union all
  30. select isnull([品名]+'汇总','总合计'),sum(数量)
  31. from test group by [品名] with rollup
  32. order by 1
  33. Declare @T Table (
  34. 品名 Varchar(10),
  35. 数量 int
  36. )
  37. InSert Into @T
  38. Select 'A', 1
  39. Union All Select 'A', 2
  40. Union All Select 'A', 2
  41. Union All Select 'B', 2
  42. Union All Select 'B', 1
  43. Union All Select 'B', 3
  44. Select * from @T
  45. Union All
  46. Select 品名+'汇总', SUM(数量) From @T
  47. Group By RollUp(品名)
  48. Having ISNULL(品名,'') <> ''
  49. Order By 品名
  50. Select * from @T
  51. Union All
  52. Select 品名+'汇总', SUM(数量) From @T
  53. Group By CUBE(品名)
  54. Having ISNULL(品名,'') <> ''
  55. Order By 品名

发表评论

表情:
评论列表 (有 0 条评论,224人围观)

还没有评论,来说两句吧...

相关阅读

    相关 group by

    在 SQL 中,GROUP BY 是一种用于将结果集按照一定的条件分组的语句。使用 GROUP BY 语句可以将表中的数据根据某一列的值分成若干个组,然后对每个组进行聚合操作(

    相关 GROUP BY 函数

    GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。(其中合计函数包括:sum min max avg等) SQL GROUP BY 实例 我们拥

    相关 group by

    \- -根据机器型号分组 查出分别检测一台机器检测了多少人 select count(\),godseye\_shuangjia\_machineid from gods

    相关 mysql group by order by

    这两天让一个数据查询难了。主要是对group by 理解的不够深入。才出现这样的情况 这种需求,我想很多人都遇到过。下面是我模拟我的内容表 复制代码 代码如下:

    相关 hive group by

    group by 操作: 1,Map端聚合:Map端进行部分聚合 hive.map.aggr用于设定是否在Map端进行聚合,默认hive.map.aggr=tru

    相关 distinct && group by

    单纯的去重操作使用distinct,速度是快于group by的。   group by使用的频率相对较高,但正如其功能一样,它的目的是用来进行聚合统计的,虽然也可能实现去