求版主加 精华贴~
小菜鸟我来论坛,一个半星期了。今天技术积分终于突破了 200分。
感谢
dingjun123 以及
各位大侠对我的无私帮助。我也要帮助下新人,特别总结下聚合函数over,与分组函数group by rollup
内容可能对高手来说是个笑话,但orlace的知识不是笑话
我援引的帖子是----> 如何实现比较复杂的分组、小计与合计
http://www.itpub.net/viewthread. ... p;extra=&page=1这是2008年的一个老帖。在dingjun123和各位大侠的帮助下。我终于明白了很多。
下面分享下我的学习成果(
基础代码在二楼贴出)
首先纠正下我原来对over的一个误解。我总觉得,rank(),row_number(),dense_rank() 这些都是跟over一起用的。
其实这导致了我后来走入了一个很大的误区。其实 sum(),avg()还有其他函数,都是可以写在over前面的;如
SELECT STOCK_ID,QTY,
SUM(QTY) OVER(PARTITION BY STOCK_ID),
AVG(QTY) OVER(PARTITION BY STOCK_ID) FROM T_DIST;
这个函数的真正作用是根据STOCK_ID进行分组求和(sum),或者求平均数(avg)。独立作为一列,加在最后。
注意,这里没有group 函数 哦~GROUP BY ROLLUP 函数大家都懂。
SELECT STOCK_ID,TYPE_CD,DISCOUNT,SUM(QTY) FROM T_DIST GROUP BY ROLLUP(STOCK_ID,(TYPE_CD,DISCOUNT));
根据STOCK_ID,(TYPE_CD,DISCOUNT)分组。括号内的表示捆绑,你懂的哦。
--学习是一步一步来的。
--1,
select stock_Id,TYPE_CD,DISCOUNT,QTY from t_dist;
--2,聚合函数,over,‘行’分组求和
SELECT STOCK_ID,QTY,SUM(QTY) OVER(PARTITION BY STOCK_ID) FROM T_DIST;
--(最后多一列,上面提及了)
--3,group,‘列’分组求和
SELECT STOCK_ID,TYPE_CD,DISCOUNT,SUM(QTY) FROM T_DIST GROUP BY ROLLUP(STOCK_ID,(TYPE_CD,DISCOUNT));
--(由于是分组统计多了4行合计)
--现在在3的基础上+ b1,b2,b3(看步骤2)
SELECT STOCK_ID,
TYPE_CD B1,
DISCOUNT B2,
SUM(QTY) B3,
SUM(
TYPE_CD) OVER(PARTITION BY STOCK_ID) A1,
SUM(
DISCOUNT) OVER(PARTITION BY STOCK_ID) A2,
SUM(
SUM(QTY)) OVER(PARTITION BY STOCK_ID) A3
FROM T_DIST GROUP BY ROLLUP(STOCK_ID,(TYPE_CD,DISCOUNT));
--我们可以发现 b1和b2(
蓝色),b3 (
紫色)本来就是同级别的。 a1,a2,a3只不过对b1,b2,b3求了和而已;
--继续增加2列吧
SELECT STOCK_ID,
TYPE_CD B1,DISCOUNT B2,SUM(QTY) B3,
SUM(TYPE_CD) OVER(PARTITION BY STOCK_ID) A1,
SUM(DISCOUNT) OVER(PARTITION BY STOCK_ID) A2,
SUM(SUM(QTY)) OVER(PARTITION BY STOCK_ID) A3,
grouping(STOCK_ID) k1,
grouping(TYPE_CD) k2,grouping(DISCOUNT) k3, FROM T_DIST GROUP BY ROLLUP(STOCK_ID,(TYPE_CD,DISCOUNT));
/*这里增加的k1是最后的分组(STOCK_ID在前),
k2,k3是同级,因为在gollup中,绑定了 TYPE_CD和DISCOUNT*/
好了,最后的大戏来了。我到底发现了什么呢???
就是rollup与over步骤先后顺序,先走的 rollup,然后是 over。
证据是什么呢?因为rollup 之后才会有grouping(xx),而且在over函数中还可以使用;
看终结部分,再增加2列(经原来a3改造过成p3)
SELECT STOCK_ID,
TYPE_CD B1,DISCOUNT B2,SUM(QTY) B3,
SUM(TYPE_CD) OVER(PARTITION BY STOCK_ID) A1,
SUM(DISCOUNT) OVER(PARTITION BY STOCK_ID) A2,
SUM(SUM(QTY)) OVER(PARTITION BY STOCK_ID) A3,
SUM(SUM(QTY)) OVER(PARTITION BY STOCK_ID,(GROUPING(TYPE_CD))) P3,GROUPING(STOCK_ID) K1, --
GROUPING(TYPE_CD) K2,GROUPING(DISCOUNT) K3 --
FROM T_DIST GROUP BY ROLLUP(STOCK_ID,(TYPE_CD,DISCOUNT));
注意到A3和p3的区别没。
这partition分组用的grouping(type_cd),其实是GROUP BY ROLLUP之后产生的。
因此这里的over分组,其实还用了之前的产生的grouping(type_cd)。
相关推荐
接着,为了实现小计和合计,我们创建另一个临时表#TB1。在这个过程中,我们会用到标识符(identity)列来区分原始数据和计算的数据。通过`SELECT * INTO #TB1 FROM #TB WHERE 1<>1`,我们创建了一个空的#TB1表,保留...
总结一下,SQL实现小计、合计和排序的关键在于: 1. 使用`GROUP BY`配合聚合函数(如`SUM`)进行小计和合计的计算。 2. 使用`WITH ROLLUP`获取所有级别的合计。 3. 利用`ORDER BY`进行排序,可以结合`GROUPING`函数...
用友U8自定义报表使用存储过程时,使用系统的分组和小计、累计、合计是指在用友U8自定义报表中使用存储过程来生成报表,同时利用系统的分组和小计、累计、合计功能来实现报表的统计和分析。 在用友U8中,自定义报表...
总结,ExtJS 4.2的分组小计功能强大且灵活,能有效地帮助开发者构建具有数据分析功能的Web应用。通过理解并熟练运用上述知识点,你可以根据实际需求构建出满足用户需求的表格展示。在实际项目中,还需要注意数据的...
### 使用ROLLUP函数生成报表的小计、合计 在数据库查询操作中,经常需要对数据进行分组统计,并在此基础上进一步生成包含小计和总计的报表。这种需求在人力资源管理系统(如文中提到的eHR系统)以及其他各类业务...
总结,`DataGridView`控件在C#编程中扮演着重要的角色,其分组、合计和筛选功能极大地增强了数据的展示和处理能力。通过熟练掌握这些特性,开发者可以创建出功能强大的数据管理界面,满足各种业务需求。
Oracle关于分组小计再合计-附件资源
文章目录小计、合计与总计多维度交叉统计自定义统计维度数据透视表总结 学习过 SQL 的人都知道,使用聚合函数(AVG、SUM、COUNT、MIN/MAX 等)和分组操作(GROUP BY)可以对数据进行基本的统计分析,例如统计公司...
在这个主题中,我们将深入探讨如何使用Dev Gridcontrol通过代码实现分组合计功能,这对初学者来说是非常实用的。 首先,理解分组和总计的概念。分组是将数据根据一个或多个字段进行分类,使同类数据聚集在一起,...
在IT领域,特别是数据展示和...通过上述步骤,我们就能利用GridControl实现数据的分组展示,并进行总计和平均值的计算。这种功能对于数据分析、报表制作等场景非常有用,能够帮助用户快速理解大量数据的分布和趋势。
U8自定义报表使用存储过程时,使用系统的分组和小计、累计、合计
分合计"的话题中,我们将深入探讨如何实现`DataGridView`的动态表头、计算合计以及分组功能。 首先,**动态表头**是指在运行时根据数据源的结构或用户需求自动生成表头的能力。这在处理结构多变或需要自定义显示的...
在ExtJS6中,数据网格可以配置分组、分组合计行以及二重表头,这些都是增强数据展示和理解的重要特性。分组功能允许将数据按照特定字段进行分类,使数据更有条理;分组合计行则是在每个分组下显示该组数据的总计,...
在本例中,我们关注的是jqGrid的分组、合计以及表头合并的功能,这些都是在处理大数据表格时非常实用的特性。 首先,让我们了解**分组**的概念。在jqGrid中,分组允许我们将数据根据某个字段进行分类,使得同类数据...
6.在首页打印本页小计,最后一页打印本页小计和合计(如果只有一页,则打印本页小计和合计) 7.加入自定义函数 8.在FastReport中将两字段连接起来(用脚本实现) 9.数据栏的动态调试设置 10.在Delphi中定义数据字段 11....
要实现这种效果,我们需要对DataGridView的列进行分组,并利用`ColumnHeaderCell`的`MergeHeaderCell`属性来合并列标题。在C#代码中,我们可以遍历所有列,设置合适的合并属性,使它们形成所需的二维表头结构。 ...
- 实现小计的方式有两种: - 直接从界面操作,通过添加Summary Item来设置。 - 通过编程方式设置,如下所示: ```csharp GridGroupSummaryItem item1 = new GridGroupSummaryItem(); item1.FieldName = "参考...
* layui分组表格控件,用于实现页面数据分组,并以树形结构显示 * 1、支持多级分组; * 2、支持自定义分组标题; * 3、支持分组数据行数显示; * 4、所有行数据会增加属性: * $treetype as [d|g] : 数据类型...
通过自定义DataGridView类的方式,可以实现较为复杂的显示效果,例如实现双表头以及合计栏功能。 #### 一、基础知识 **DataGridView控件简介:** - **DataGridView**是Windows Forms应用程序中用于显示二维表格...