在实际开发过程中,对数据进行的查询,常常是不仅要查询数据本身,还要对其进行分组查询。这时候最简单的方法是进行多次查询后将数据合并。但使用grouping可以更方便简洁地进行上述查询。
假设有如下数据表:
create table student(
id varchar2(32) primary key,
class varchar2(32),
name varchar2(32),
sex varchar2(32),
score integer);
insert into student values('20110101','1','张三','男',90);
insert into student values('20110102','1','李四','男',95);
insert into student values('20110103','1','小明','男',95);
insert into student values('20110104','1','李娜','女',93);
insert into student values('20110105','1','小茜','女',93);
insert into student values('20110201','2','张龙','男',90);
insert into student values('20110202','2','赵虎','男',95);
insert into student values('20110203','2','小倩','女',95);
insert into student values('20110204','2','珊珊','女',94);
insert into student values('20110205','2','小沐','女',94);
commit;
查询所有学生的成绩及按班级、性别分组后的平均成绩:
select id,
class,
decode(grouping_id(class, sex, name),
7,
'总平均',
3,
class || '班平均',
1,
class || '班' || sex || '生平均',
name) sname,
sex,
avg(score)
from student t
group by grouping sets((),(class),(class, sex),(class, sex, name, id))
order by grouping_id(class, sex, name), class, id
得到如下结果:
可以看到,只要通过一次查询就得到了数据本身和各种分组数据。下面说明用到的特殊语句和函数:
1.group by grouping sets((),(class),(class, sex),(class, sex, name, id))
grouping sets 相当与将多个group by的分组条件合并,空的分组条件则是所有数据的总合计。上述语句就相当于查询时没有group条件、使用group by(class)、group by(class,sex)、
group by(class, sex, name, id)这四种情况下查询得到的数据合并到一起。
2.grouping_id(class, sex, name)
grouping_id(arg)函数判断其参数是否参与了分组,如果没有参与则返回1,如果参与了分组则返回0,如在本例中grouping_id(class)在除了总合计以外的结果集中class都参与了分组,即grouping_id(class)在第1~16行返回0,第17行返回1。而其多个参数的形式则将其每个参数进行grouping_id(arg)运算后返回的值拼成二进制后转换为十进制返回,即grouping_id(argn,...,arg2,arg1)=grouping_id(argn)*2^(n-1)+...+grouping_id(arg2)*2^1+grouping_id(arg1)*2^0('^'表示幂运算)。
在上述示例中,在1~10行结果相当于group by(class, sex, name, id)返回的结果,此时grouping_id(class, sex, name)的所有参数参与了分组,则返回值为(000)二进制=(0)十进制;第11~14行相当于group by(class,sex)的结果,此时class和sex参与了分组,grouping_id(class, sex, name)返回值为(001)二进制=(1)十进制;第15、16行相当于group by(class),此时class参与了分组,grouping_id(class, sex, name)返回值为(011)二进制=(3)十进制;而第17行相当于没有group条件,此时没有分组参数,则grouping_id(class, sex, name)返回值为(111)二进制=(7)十进制。
3.decode(grouping_id(class, sex, name),7, '总平均',3,class || '班平均',1,class || '班' || sex || '生平均',name)
decode(condition,arg1,return1,arg2,return2,...,argn,returnn,default)相当于如下语句:
if(condition = arg1) {
return return1;
}else if(condition = arg2) {
return return2;
}
......
else if(condition = argn) {
return returnn;
}else {
return defualt;
}
- 大小: 65.3 KB
分享到:
相关推荐
groupSummary: [true] // 在分组行显示统计结果 }, ... ] ``` 2. 自定义统计函数 如果内置的统计类型无法满足需求,可以使用`summaryTpl`和`summaryType`配合自定义函数: ```javascript colModel: [ ... { ...
可以看到,GROUP BY GROUPING SETS 语句的作用是,先按照 qylx_dm 列进行分组,然后输出结果,然后按照 zt 列进行分组,输出结果。需要注意的是,GROUP BY GROUPING SETS 语句可以输出合计结果,只需要加一对空括号...
分组统计的目的是将数据按照某种条件分组,然后对每个组进行聚合计算,最后输出结果。 分组统计可以分为多种类型,我们常用的有三个:Grouping Sets、Rollup 和 Cube。这三种类型都可以用来实现分组统计,但它们...
"Android.File.Grouping" 插件实现了这一功能,它允许开发者根据自定义规则对资源文件进行自动或手动分组。例如,可以将所有与用户界面相关的布局文件归为一组,将所有的图片资源归为另一组。这样,即使是在庞大的...
### 多尺度组合分组(Multiscale Combinatorial Grouping, MCG) #### 概述 《多尺度组合分组》是由计算机视觉领域的大牛Jitendra Malik等人提出的一种自下而上的图像分割方法。该方法旨在统一解决图像层次分割和...
在Java编程中,"按照每周分组"是一个常见的数据处理需求,特别是在数据分析、报表生成或者时间序列分析等场景。这个需求通常涉及到日期处理和集合分组。以下将详细讲解如何在Java中实现这一功能。 首先,我们需要...
- 使用Ajax控件工具箱的UpdatePanel,将GridView放入其中,这样在进行分组操作时,只有UpdatePanel内的内容会被更新。 - 在后台代码(CH3_DemoForm015.aspx.vb)中,处理数据源的绑定和事件,例如,当GridView的...
在使用DevExpress的GridControl组件进行数据展示时,我们经常会遇到需要对数据进行分组或统计的需求。本文将详细介绍如何在GridControl中实现分组以及如何设置Summary(摘要)功能。 #### 二、分组(Grouping) ####...
除了基本的`groupingBy`,我们还可以使用`partitioningBy`进行二元分组,或者结合`收集器`(如`reducing`,`summingInt`等)对分组后的数据进行进一步处理。例如,我们可能想计算每个年龄段的人数: ```java Map, ...
`GROUP BY` 语句是 SQL 中一种常用的语句,用来对查询结果进行分组并进行聚合操作。但是,如果我们想要对分组结果进行汇总统计时,使用 `ROLLUP` 子句可以实现这一功能。 ROLLUP 子句的作用 `ROLLUP` 子句可以在 `...
`Collectors.groupingBy`是Java 8引入的收集器(Collector),用于将流(Stream)中的元素按照一个函数的结果进行分组。例如,假设我们有一个`Dish`类,其中包含类型`Dish.Type`和卡路里`CaloricLevel`等属性。我们...
这个小程序的核心目标是根据输入的起始和结束号码,将一系列数字进行随机分组。这样的功能可能应用于在线教育的分组讨论、抽奖程序或者数据分析等多种场景。下面我们将详细探讨如何实现这一功能。 首先,我们需要...
- `GROUP BY`:对查询结果进行分组。 - `ORDER BY`:对查询结果进行排序。 - `HAVING`:用于过滤已分组的数据。 #### 单表查询详解 1. **选择(Selection)** - 选择是指从表中选择满足特定条件的行。这通常通过`...
### 无监督感知分组(Deep Unsupervised Perceptual Grouping)——理论与实践解析 #### 摘要 本文介绍了一种高效感知推理框架,该框架明确地考虑了输入及其特征的分割问题。不同于特定分割训练的方式,本框架采用...
5. **嵌套分组**: ASPxGridView支持多级分组,即在一个分组内再进行分组,这可以帮助用户更好地组织和理解数据结构。 **二、ASPxGridView分页功能** 1. **基本分页**: 设置`AllowPaging`为`true`启用分页功能。...
Pandas提供了DataFrame对象,可以方便地处理表格型数据,并且支持多种分组和聚合操作。例如,`groupby()`函数允许我们将数据按照一个或多个列的值进行分组,而`agg()`或`apply()`函数则用于对每个分组应用聚合函数,...
其中,[DISTINCT]选项决定记录重复输出与否,[输出数量]指定输出记录的数量,<查询项>指定查询输出的数据项,[AS 列标题]指定查询结果的列标题,<数据源>指定查询的数据来源,[WHERE <条件>]指定查询要满足的条件。...
Postgresql 支持 ROLLUP 语句,使用 ROLLUP 语句可以对表中的数据进行分组,并且可以对分组结果进行 weiter grouping。例如: ```sql SELECT * FROM test GROUP BY ROLLUP (A, B, C); ``` Cube 语句 Postgresql ...