精华内容
下载资源
问答
  • 在此使用oracle,oracle 中的用法为 group by [rollup|cube]( colomn),sql server中的用法为group by colomn with [rollup|cube]首先要弄明白rollup cube,就要知道group by的用法,group by 为对列进行分组,只...

    在此使用oracle,oracle 中的用法为 group by [rollup|cube]( colomn),sql server中的用法为group by colomn with [rollup|cube]

    首先要弄明白rollup 和cube,就要知道group by的用法,group by 为对列进行分组,只展现分组统计的值,而rollup 为分层次展现,cube为展现列中所有层次,听我娓娓道来。

    1、搭建场地

    首先建立一个group_by 表,列值分别为购买者名称,购买物品的大类,购买物品的小类,物品以及价格,

    1397757-20180726224511658-2047850742.png

    用户购买了一些3C以及衣物

    8f900a89c6347c561fdf2122f13be562.png

    961ddebeb323a10fe0623af514929fc1.png

    1 create tablegroup_by (2 o_name varchar2(20),3 o_class varchar2(20),4 o_item varchar2(20),5 o_object varchar2(20),6 o_price int

    7 )8

    9 insert into group_by values('springy','3C','phone','huawei',4000);10 insert into group_by values('springy','3C','phone','xiaomi',3000);11 insert into group_by values('springy','3C','computer','mac',10000);12 insert into group_by values('springy','3C','phone','thinkpad',8000);13 insert into group_by values('springy','3C','phone','huawei',4000);14 insert into group_by values('springy','clothes','shoes','adidas',300);15 insert into group_by values('springy','clothes','shoes','lining',400);16 insert into group_by values('springy','clothes','pants','jackjones',500);17 insert into group_by values('stephenson','clothes','shoes','adivon',200);18 insert into group_by values('stephenson','clothes','shoes','nike',300);19 insert into group_by values('stephenson','clothes','skirt','nike',300);20 insert into group_by values('stephenson','clothes','skirt','adidas',400);21 commit;

    View Code

    f208a8e40a7aedb71eeead3ae9fc1dca.png

    2、初识group by

    此时向我们缓缓走来的是group by,group by 可以对数据进行分组求值。

    首先对O_NAME,O_CLASS,O_ITEM进行group by 分组 ,查看购买者购买对应分类物品的价格合计。

    e00939027b8ca0e080f33db4331e4fbc.png

    8f900a89c6347c561fdf2122f13be562.png

    961ddebeb323a10fe0623af514929fc1.png

    1 select o_name, o_class, o_item, sum(o_price)2 fromgroup_by3 group byo_name, o_class, o_item4 order by o_name, o_class, o_item

    View Code

    我们可以看到购买者没类物品消耗的价格

    3、rollup

    此时我们对统计的数据不太理想,除了想看每个小类,还想看每个大类,以及他们两人的消费和

    表格画出来就是这个意思

    表3-1

    776a363d8244ab084a7484f248f4e833.png

    这时,我们将其与上面group by的进行对比,发现多了这些

    表3-2

    46d8ce249a5b2802bc67c1d81de10258.png

    而这些又是怎么出来的呢?

    这是就回到了开始所说的,rollup为分层次展现,怎么个分层次法呢?

    首先,我们要确定,group by 的为O_NAME,O_CLASS,O_ITEM,此时对这些值进行分层次展现,即为下表

    053043cbbe82ec50b4b3f25c73aebdf9.png

    其中第一行为group by出来的,接下来的三行即为分层次汇总统计,而最后的空白的一行为对购买者进行汇总统计。

    带入我们的例子中,可以看出来即为表3-1,而第2-4行则为多出来的部分,在此也可以看出来rollup 对group by中的值有顺序要求

    8f900a89c6347c561fdf2122f13be562.png

    961ddebeb323a10fe0623af514929fc1.png

    1 select o_name,o_class,o_item,sum(o_price),grouping(o_name ),grouping(o_class),grouping(o_item)2 fromgroup_by3 group byrollup (o_name,o_class,o_item)4 order by o_name,o_class,o_item

    View Code

    使用rollup出来的结果

    c67dc2285809f11a84224cfe5c25c62e.png

    此时,看到的结果和表格也不一样呀,其中还有这么多空格怎么处理??别急,接下来会讲到

    4、初始cube

    说完rollup,开始说cube

    开始说cube为展现所有层次,这是什么意思呢?就是有这里面所有的分组汇总统计

    074a3f2f069b4398b26ef4c5b673e96d.png

    在此,看下我们的结果

    8f900a89c6347c561fdf2122f13be562.png

    961ddebeb323a10fe0623af514929fc1.png

    select o_name,o_class,o_item,sum(o_price),grouping(o_name ),grouping(o_class),grouping(o_item)fromgroup_bygroup bycube (o_name,o_class,o_item)order by o_name,o_class,o_item

    View Code

    189cee511641444f3c27aaf44b07eebd.png

    5、group by、rollup、cube的用法以及区别

    cube的组合

    使用数字表达一下,看上去至少会更清晰点

    7a4ce08f789eb7101a126a0932fb645d.png

    想必这样子看上去更明白些,空值部分即该行为合计,这里面列出了所有分组。

    而cube与rollup的区别在于后面对2,3部分的分组

    rollup分组

    1a678f94b2b2c60556cbd9f8d7496758.png

    group by分组

    bd712c97ed6917af3b6e656633e2337c.png

    想必这样子更直观

    6、处理空值

    此时有一个方法为grouping() 可以查看该值是否有rollup|cube产生的,若为其值则为1,否则为0,使用一个case when判断一下就好。

    下图为使用cube时,可以看出每个有cube产生合计,即空值处,其grouping的值都为1

    8f900a89c6347c561fdf2122f13be562.png

    961ddebeb323a10fe0623af514929fc1.png

    1 select o_name,o_class,o_item,sum(o_price),grouping(o_name ),grouping(o_class),grouping(o_item)2 fromgroup_by3 group bycube (o_name,o_class,o_item)4 order by o_name,o_class,o_item

    View Code

    b771ec7698a0b8b8262e4629b47ab320.png

    7 应用

    7.1在统计时,若只有一列,那么cube和rollup没差别

    8f900a89c6347c561fdf2122f13be562.png

    961ddebeb323a10fe0623af514929fc1.png

    select case

    when grouping(o_name) = '1' then

    '合计'

    elseo_nameend ascustomer,sum(o_price) astotal,grouping(o_name)fromgroup_bygroup byrollup(o_name)order by o_name

    View Code

    8c050129093e17f50222f9bd344a0ef2.png

    在看到上图时,只对一列进行统计时,并且有合计值时使用cube和rollup都ok。

    7.2 若进行两列的统计

    8f900a89c6347c561fdf2122f13be562.png

    961ddebeb323a10fe0623af514929fc1.png

    1 select case

    2 when grouping(o_name) = '1' then

    3 count(distinct o_name) || '位'

    4 else

    5 o_name6 end ascustomer,7 case

    8 when grouping(o_class) = 1 and grouping(o_name) = 1 then

    9 '合计'

    10 when grouping(o_class) = 1 then

    11 '小计'

    12 else

    13 o_class14 end asclass,15 sum(o_price) astotal,16 grouping(o_name),17 grouping(o_class)18 fromgroup_by19 group byrollup(o_name, o_class)20 order by o_name, o_class

    View Code

    90ff5fb13f342d7799bb1aaccbbf7eda.png

    看到类似上图时,总的合计中不出现第二列的详细情况时,只对两列进行总的合计时,使用rollup

    7.3 两列分各种情况全统计

    此时,我除了想看到两位顾客和消费,还想看到两位在各个类上的消费是

    8f900a89c6347c561fdf2122f13be562.png

    961ddebeb323a10fe0623af514929fc1.png

    1 select case

    2 when grouping(o_name) = '1' and grouping(o_class) = 1 then

    3 count(distinct o_name) || '位消费'

    4 when grouping(o_class) = 1

    5 then

    6 o_name7 end ascustomer,8 case

    9 when grouping(o_class) = 1 and grouping(o_name) = 1 then

    10 '合计'

    11 when grouping(o_class) = 1 then

    12 '小计'

    13 else

    14 o_class15 end asclass,16 sum(o_price) astotal,17 grouping(o_name),18 grouping(o_class)19 fromgroup_by20 group bycube(o_name, o_class)21 order by o_name, o_class desc

    View Code

    da3fa15fea11aadc07e29adb4c577abf.png

    对应的图就是上面这样子。

    若果仍不清楚,就挨着试一下rollup和cube。

    展开全文
  •  在此使用oracle,oracle 中的用法为 group by [rollup|cube]( colomn),... 首先要弄明白rollup cube,就要知道group by的用法,group by 为对列进行分组,只展现分组统计的值,而rollup 为分层次展现,cube...

     在此使用oracle,oracle 中的用法为 group by [rollup|cube]( colomn),sql server中的用法为group by colomn with [rollup|cube]

      首先要弄明白rollup 和cube,就要知道group by的用法,group by 为对列进行分组,只展现分组统计的值,而rollup 为分层次展现,cube为展现列中所有层次,听我娓娓道来。

    1、搭建场地

    首先建立一个group_by 表,列值分别为购买者名称,购买物品的大类,购买物品的小类,物品以及价格,

    用户购买了一些3C以及衣物

     1 create table group_by (
     2 o_name varchar2(20),
     3 o_class varchar2(20),
     4 o_item varchar2(20),
     5 o_object varchar2(20),
     6 o_price int
     7 )
     8 
     9 insert into group_by values('springy','3C','phone','huawei',4000);
    10 insert into group_by values('springy','3C','phone','xiaomi',3000);
    11 insert into group_by values('springy','3C','computer','mac',10000);
    12 insert into group_by values('springy','3C','phone','thinkpad',8000);
    13 insert into group_by values('springy','3C','phone','huawei',4000);
    14 insert into group_by values('springy','clothes','shoes','adidas',300);
    15 insert into group_by values('springy','clothes','shoes','lining',400);
    16 insert into group_by values('springy','clothes','pants','jackjones',500);
    17 insert into group_by values('stephenson','clothes','shoes','adivon',200);
    18 insert into group_by values('stephenson','clothes','shoes','nike',300);
    19 insert into group_by values('stephenson','clothes','skirt','nike',300);
    20 insert into group_by values('stephenson','clothes','skirt','adidas',400);
    21 commit;
    View Code

    2、初识group by

    此时向我们缓缓走来的是group by,group by 可以对数据进行分组求值。

    首先对O_NAME,O_CLASS,O_ITEM进行group by 分组 ,查看购买者购买对应分类物品的价格合计。

    1 select o_name, o_class, o_item, sum(o_price)
    2 from group_by
    3 group by o_name, o_class, o_item
    4 order by o_name, o_class, o_item
    View Code

    我们可以看到购买者没类物品消耗的价格

    3、rollup

    此时我们对统计的数据不太理想,除了想看每个小类,还想看每个大类,以及他们两人的消费和

    表格画出来就是这个意思

        表3-1

    这时,我们将其与上面group by的进行对比,发现多了这些

        表3-2

    而这些又是怎么出来的呢?

    这是就回到了开始所说的,rollup为分层次展现,怎么个分层次法呢?

    首先,我们要确定,group by 的为O_NAME,O_CLASS,O_ITEM,此时对这些值进行分层次展现,即为下表

    其中第一行为group by出来的,接下来的三行即为分层次汇总统计,而最后的空白的一行为对购买者进行汇总统计。

    带入我们的例子中,可以看出来即为表3-1,而第2-4行则为多出来的部分,在此也可以看出来rollup 对group by中的值有顺序要求

    1 select o_name,o_class,o_item,sum(o_price),grouping(o_name ),grouping(o_class),grouping(o_item)
    2 from group_by
    3 group by rollup (o_name,o_class,o_item) 
    4 order by o_name,o_class,o_item 
    View Code

    使用rollup出来的结果

    此时,看到的结果和表格也不一样呀,其中还有这么多空格怎么处理??别急,接下来会讲到

    4、初始cube 

    说完rollup,开始说cube

    开始说cube为展现所有层次,这是什么意思呢?就是有这里面所有的分组汇总统计

     在此,看下我们的结果

    select o_name,o_class,o_item,sum(o_price),grouping(o_name ),grouping(o_class),grouping(o_item)
    from group_by
    group by cube (o_name,o_class,o_item) 
    order by o_name,o_class,o_item 
    View Code

     

    5、group by、rollup、cube的用法以及区别

    cube的组合

    使用数字表达一下,看上去至少会更清晰点

    想必这样子看上去更明白些,空值部分即该行为合计,这里面列出了所有分组。

    而cube与rollup的区别在于后面对2,3部分的分组

    rollup分组

    group by分组

    想必这样子更直观

     6、处理空值

    此时有一个方法为grouping() 可以查看该值是否有rollup|cube产生的,若为其值则为1,否则为0,使用一个case when判断一下就好。

    下图为使用cube时,可以看出每个有cube产生合计,即空值处,其grouping的值都为1

    1 select o_name,o_class,o_item,sum(o_price),grouping(o_name ),grouping(o_class),grouping(o_item)
    2 from group_by
    3 group by cube (o_name,o_class,o_item) 
    4 order by o_name,o_class,o_item 
    View Code

     

    7 应用

    7.1在统计时,若只有一列,那么cube和rollup没差别

    select case
             when grouping(o_name) = '1' then
              '合计'
             else
              o_name
           end as customer,
           sum(o_price) as total,
           grouping(o_name) 
      from group_by
     group by rollup(o_name)
     order by o_name
    View Code

     

    在看到上图时,只对一列进行统计时,并且有合计值时使用cube和rollup都ok。

    7.2 若进行两列的统计

     1 select case
     2          when grouping(o_name) = '1' then
     3           count(distinct o_name) || ''
     4          else
     5           o_name
     6        end as customer,
     7        case
     8          when grouping(o_class) = 1 and grouping(o_name) = 1 then
     9           '合计'
    10          when grouping(o_class) = 1 then
    11           '小计'
    12          else
    13           o_class
    14        end as class,
    15        sum(o_price) as total,
    16        grouping(o_name),
    17        grouping(o_class)
    18   from group_by
    19  group by rollup(o_name, o_class)
    20  order by o_name, o_class
    View Code

    看到类似上图时,总的合计中不出现第二列的详细情况时,只对两列进行总的合计时,使用rollup

    7.3 两列分各种情况全统计

     此时,我除了想看到两位顾客和消费,还想看到两位在各个类上的消费是

    复制代码
     1 select case
     2          when grouping(o_name) = '1' and grouping(o_class) = 1 then
     3           count(distinct o_name) || '位消费'
     4            when grouping(o_class) = 1
     5          then
     6           o_name
     7        end as customer,
     8        case
     9          when grouping(o_class) = 1 and grouping(o_name) = 1 then
    10           '合计'
    11          when grouping(o_class) = 1 then
    12           '小计'
    13          else
    14           o_class
    15        end as class,
    16        sum(o_price) as total,
    17        grouping(o_name),
    18        grouping(o_class)
    19   from group_by
    20  group by cube(o_name, o_class)
    21  order by o_name, o_class desc
    复制代码
    View Code

     

    对应的图就是上面这样子。

    若果仍不清楚,就挨着试一下rollup和cube。

     

    http://www.cnblogs.com/springy/p/9375236.html

    展开全文
  • 今天复习MySQL知识时候,看到WITH ROLLUP字段感觉一点印象也没有,查阅相关资料自己小练习,顿时醍醐灌顶。 这个字段就是也group by 一起用,放置在语句末尾。 直接建了一个小表在数据库中,然后插入一些...

    今天复习MySQL知识的时候,看到WITH ROLLUP字段感觉一点印象也没有,查阅相关资料和自己的小练习,顿时醍醐灌顶。

    这个字段就是也group by 一起用,放置在语句末尾。

    直接建了一个小的表在数据库中,然后插入一些数据,如图:

    首先是不带with rollup字段的分组查看:

    在这里插入图片描述
    然后是带上with rollup字段的查看:

    在这里插入图片描述
    一下子就能看出区别了,就相当于对所有分的组进行一次运算。同样的avg,min函数也是同理。

    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • <p>I started kidding around with Go and am a little irritated by the <code>new</code> function. It seems to be quite limited, especially when considering structures with anonymous fields or inline ...
  • SQL code &lt;!-- Code highlighting produced by Actipro CodeHighlighter (freeware) ...with rollup 、with cube、grouping ...CUBE ROLLUP 之间的区别在于: CUBE 生成结果集显示了所...
    SQL code
    <!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->with rollup 、with cube、grouping CUBE 和 ROLLUP 之间的区别在于: CUBE 生成的结果集显示了所选列中值的所有组合的聚合。 ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。 grouping: 当用 CUBE 或 ROLLUP 运算符添加行时,附加的列输出值为1,当所添加的行不是由 CUBE 或 ROLLUP 产生时,附加列值为0。 --例如 DECLARE @T TABLE(名称 VARCHAR(1) , 出版商 VARCHAR(10), 价格1 INT, 价格2 INT) INSERT @T SELECT 'a', '北京', 11, 22 UNION ALL SELECT 'a', '四川', 22, 33 UNION ALL SELECT 'b', '四川', 12, 23 UNION ALL SELECT 'b', '北京', 10, 20 UNION ALL SELECT 'b', '昆明', 20, 30 SELECT 名称, 出版商, SUM(价格1) AS 价格1, SUM(价格2) AS 价格2, GROUPING(名称) AS CHECK名称, GROUPING(出版商) AS CHECK出版商 FROM @T GROUP BY 名称,出版商 WITH CUBE /* 名称 出版商 价格1 价格2 CHECK名称 CHECK出版商 ---- ---------- ----------- ----------- ------- -------- a 北京 11 22 0 0 a 四川 22 33 0 0 a NULL 33 55 0 1 b 北京 10 20 0 0 b 昆明 20 30 0 0 b 四川 12 23 0 0 b NULL 42 73 0 1 NULL NULL 75 128 1 1 NULL 北京 21 42 1 0 NULL 昆明 20 30 1 0 NULL 四川 34 56 1 0 (所影响的行数为 11 行) */ --分析 /*group by 两列:名称有两个类别A,B;所有由CUBE运算而生成行的是 名称 出版商 价格1 价格2 CHECK名称 CHECK出版商 ---- ---------- ----------- ----------- ------- -------- a NULL 33 55 0 1 b NULL 42 73 0 1 出版商有三个类别,所有由CUBE运算而生成行的是 名称 出版商 价格1 价格2 CHECK名称 CHECK出版商 ---- ---------- ----------- ----------- ------- -------- NULL 北京 21 42 1 0 NULL 昆明 20 30 1 0 NULL 四川 34 56 1 0 以及 NULL NULL 75 128 1 1 */ SELECT 名称, 出版商, SUM(价格1) AS 价格1, SUM(价格2) AS 价格2 FROM @T GROUP BY 名称,出版商 WITH ROLLUP /* 名称 出版商 价格1 价格2 ---- ---------- ----------- ----------- a 北京 11 22 a 四川 22 33 a NULL 33 55 b 北京 10 20 b 昆明 20 30 b 四川 12 23 b NULL 42 73 NULL NULL 75 128 */
    展开全文
  • 存储过程函数的区别和联系 bulk collect 用法 FORALL用法 FORALL 与 bulk collect 综合运用 start with ...connect by ...prior... 针对B树结构类型数据 递归查询 存储过程常用语句 procedure proc...
  • 扩充了toast获取展示功能 这里要先说明下,因为经常有很多人问 openatx/uiautomator2 并不支持iOS测试,需要iOS自动化测试,可以转到这个库 openatx/facebook-wda。 PS: 这个库 ...
  • asp.net知识库

    2015-06-18 08:45:45
    C#中 const readonly 的区别 利用自定义属性,定义枚举值详细文本 Web标准ASP.NET - 第一部分 XHTML介绍 在ASP.NET页面中推荐使用覆写(Override)而不是事件处理(Event Handler) 常用编码工具类,支持base...
  • like 的区别和使用注意 博文 Hive 性能优化 戳破 | hive on spark 调优点 实时离线融合在唯品会进展 数据仓库系列篇——唯品会大数据架构 数据仓库系统|框架结构 Apache Pig: 是一个基于Hadoop大规模...
  • MySQL命令大全

    2018-01-15 11:19:17
    若要给此用户赋予他在相应对象上权限管理能力,可在GRANT后面添加WITH GRANT OPTION选项。而对于用插入User表添加用户,Password字段应用PASSWORD 函数进行更新加密,以防不轨之人窃看密码。对于那些已经不用...
  • MYSQL常用命令大全

    2011-05-30 13:31:24
    若要给此用户赋予他在相应对象上权限管理能力,可在GRANT后面添加WITH GRANT OPTION选项。而对于用插入User表添加用户,Password字段应用PASSWORD 函数进行更新加密,以防不轨之人窃看密码。对于那些已经不用...
  • 掌握单表查询中各个子句(Select、From、Where、Group、Having、Order)的用法,特别要掌握比较运算符逻辑运算符的使用。 二、实验环境 Windows7操作系统,SQL Server软件。 三、实验课时 2课时。 四、实验内容...
  • 后两者的区别在于,人脸校验是要给你两张脸问你是不是同一个人,人脸识别是给你一张脸一个库问你这张脸是库里谁。 此次faceswap只用到前两个板块DetectionAlignment: Detection - 用于找到视频中被换脸人...
  • This is a very friendly environment where you can get help with your visualisations, and improve your own knowledge of ggplot2 by helping others solve their problems. I'd strongly encourage you to ...
  • 有关 submodule 的用法可自行 Google。 git submodule add https://github.com/Kujiale-Mobile/PainterCore.git components/painter 作为自定义组件引入,注意目录为第一步引入的代码所在目录 "usingComponents":{...
  • 2009 达内Unix学习笔记

    2010-02-10 19:45:32
    ls /etc/ 显示某目录下所有文件目录,如etc目录下。 ls -l (list)列表显示文件(默认按文件名排序), 显示文件权限、硬链接数(即包含文件数,普通文件是1,目录1+)、用户、组名、大小、修改日期、文件名。 ...
  • C++MFC教程

    热门讨论 2013-05-21 13:37:15
    下面的伪代码演示了消息循环的用法: while(1) { id=getMessage(...); if(id == quit) break; translateMessage(...); } 当该程序没有消息通知时getMessage就不会返回,也就不会占用系统的CPU时间。 下图为...
  • 2009达内SQL学习笔记

    2010-02-10 19:46:58
    ORDER BY子句中使用列将是为显示所选择列,但是实际上并不一定要这样,用非检索列排序数据是完全合法。 为了按多个列排序,列名之间用逗号分开。 2、支持按相对列位置进行排序。 输入 SELECT prod_id,...
  • ★详细xp修复控制台命令和用法!!! 放入xp(2000)光盘,安装时候选R,修复! Windows XP(包括 Windows 2000)控制台命令是在系统出现一些意外情况下一种非常有效诊断测试以及恢复系统功能工具。小...
  • Javascript模块化编程(三):require.js的用法 http://www.ruanyifeng.com/blog/2012/11/require_js.html RequireJS入门(一) http://www.cnblogs.com/snandy/archive/2012/05/22/2513652.html RequireJS入门...
  • 用法: Jieba::loadUserDict(file_name) # file_name 為自定義詞典絕對路徑 詞典格式 dict.txt 一樣,一個詞佔一行;每一行分為三部分,一部分為詞語,一部分為詞頻,一部分為詞性,用空格隔開 範例: ...

空空如也

空空如也

1 2
收藏数 22
精华内容 8
关键字:

with和by的用法区别