分组统计并计算每组数量sql

有 字段A 和B
比如数据如下
A  B
1  2
1  3
1  4 
2  2
2  3

统计出的sql结果:

A   count

1   3

2   2

select a,count(b) from t group by a;
--或count(b) over (partition by a)

如统计一级会计科目数量的sql:

select fo,count(dispname)from(
select substr(subjcode,1,4) fo,bd_accsubj.dispname,
bd_accsubj.pk_accsubj, bd_accsubj.pk_glorgbook
from bd_accsubj
where pk_glorgbook in(select pk_glorgbook from bd_glorgbook where glorgbookcode= ‘010502-0001‘ )
order by dispname)
group by fo  order by fo
 

方法二 partition 这个时候后面不需要group by 但是需要distinct fo 否则见下图

select id,count(*) over(partition by pro_id) from sal;
以pro_id分组,统计分组后每个pro_id的记录总数及对应的id;
类似还有count(*) over(order by ……)、sum(amount) over(partition by ……)等,略有区别,挺有意思,有兴趣可以小研究下

select distinct fo,count(dispname) over( partition by fo) num1 from
(
select substr(subjcode,1,4) fo,bd_accsubj.dispname,
bd_accsubj.pk_accsubj, bd_accsubj.pk_glorgbook
from bd_accsubj
where pk_glorgbook in(select pk_glorgbook from bd_glorgbook where glorgbookcode= ‘010502-0001‘ )
order by dispname)
order by fo

如果group by fo ,这里不能group by,总结:partition是group by的一种形式,group 不需要重复

不加distinct fo

更新2012-11-9 19:12:增加一列显示一级科目名称 需要外面嵌套两个select

select fo,
       (select subjname
          from bd_accsubj
         where subjcode = fo
           and pk_glorgbook = ‘0001E1100000000000MX‘) aa,num1
  from (select fo, count(dispname)num1
          from (select substr(subjcode, 1, 4) fo,
                       bd_accsubj.dispname,
                       bd_accsubj.pk_accsubj,
                       bd_accsubj.pk_glorgbook
                  from bd_accsubj
                 where pk_glorgbook in
                       (select pk_glorgbook
                          from bd_glorgbook
                         where glorgbookcode = ‘010101-0001‘)
                 order by dispname)
         group by fo)
 order by fo

 统计结算中心制单由哪些部分组成

select  pk_system,count(PK_SYSTEM)   from gl_voucher where pk_corp=‘1162‘ and dr=‘0‘ GROUP BY pk_system

2012-12-21 10:39:58 折腾到现在终于发现这个29462就是我结算凭证的数量

上面的gl是期初产生的,GL是手工录入,EC是单据管理付款来的(当地行支付,应收应付报账中心)

CV是协同凭证,FTS是结算中心的资金结算

结算中心从开始到现在制单有29474=29462(FTS)+6(EC)+(8-2)(GL,其中有下面两个不知道为什么废了)

时间: 2024-10-17 22:53:16

分组统计并计算每组数量sql的相关文章

Oracle 分组统计,抽取每组前十

/**2018年6月14日 潮州ORACEL 统计2017年用电量,按行业分类抽取用电量前十*/select * from (select t.yhbh 用户编号, t.yhmc 用户名称, t.jldbh 计量点编号, (select m.dmbmmc from npmis_xt_dmbm m where m.dmfl = 'YDLXDM' and m.dmbm = t.ydlbdm) 用电类型, (select m.dmbmmc from npmis_xt_dmbm m where m.dm

集算器简化SQL式计算之组内运算

在开发数据库应用时,经常会遇到分组后针对组内数据的运算问题,如:列出近3年每年都发表过论文的学生名单,统计全部参加了历次培训的员工,选出每位客户的高尔夫成绩最高的三天等等.SQL完成这类运算较为复杂,一般需要嵌套多层,导致代码难以理解和维护.而集算器擅长表达这类组内计算,且很容易和JAVA或报表工具集成.下面用一个例子来说明. 根据数据库表SaleData统计出2013年中,每个月销售金额均排在前20名的客户名称.SalesData的部分数据如下: 想解决这个问题,需要选出2013年的销售数据,

010.简单查询、分组统计查询、多表连接查询(sql实例)

-------------------------------------day3------------ --添加多行数据:------INSERT [INTO] 表名 [(列的列表)] --SELECT UNION --SELECT 'HAHA',1,32--UNION ALL --全部显示/显示重复数据 即使集合相同--UNION---------将查询的两个结果集合并.结构必须一致 -->常见面试题 --SELECT 'HEHE',2,33------将查询结果添加到列表中(子查询)IN

组函数及分组统计

分组函数 SQL中常用的分组函数 Count(): 计数 Max():求最大值 Min():求最小值 Avg():求平均值 Sum():求和 -- 统计emp表中的人数 select count(*) from emp; -- 统计获得奖金的人数 select count(comm) from emp; -- 求所有雇员的最低工资 select min(sal) from emp; -- 求所有雇员的最高工资 select max(sal) from emp; -- 求部门编号为20的雇员的平均

sql server利用开窗函数over() 进行分组统计

这是一道常见的面试题,在实际项目中经常会用到. 需求:求出以产品类别为分组,各个分组里价格最高的产品信息. 实现过程如下: declare @t table( ProductID int, ProductName varchar(20), ProductType varchar(20), Price int) --测试数据 insert @t select 1,'name1','P1',3 union all select 2,'name2','P1',5 union all select 3,

DataFrame基本操作 <三> 计算名次,移除重复数据,数据替换,划分区间,分组统计(变成类)

生成一个实例 df5 = DataFrame({'b': [4.3, 7, -3, 2], 'a': [0, 1, 0, 1], 'c': [-2, 5, 8, -2.5]}) print(df5) 运行结果 b a c 0 4.3 0 -2.0 1 7.0 1 5.0 2 -3.0 0 8.0 3 2.0 1 -2.5 计算名次 print(df5.rank() ) # 按行计算名次 print(df5.rank(axis=1)) # 按列计算名次 #这有意思了,这是计算名次,显示的结果是名次

Excel 中使用SQL 语句查询数据(八)-----用Group by 进行分组统计

今天要和大家分享用在sql 语句中使用group by来进行分组统计.大家首先来看一下数据源. 用OLE DB 打开数据源,(步骤请参考本系列第一篇博文) 最后一条语句group by Item ,就是以Item 列分组. 结果如下 按照item 分类汇总

sql 分组统计查询并横纵坐标转换

关于sql 分组统计查询,我们在做报表的时候经常需要用到;今天就在这里整理下; 先附上一段sql代码: if object_id(N'#mytb',N'U') is not null drop table #mytbgodeclare @Year intset @Year=2014create table #mytb ([Date] int,[Count] int,[Price] decimal(18, 0),[spbm] varchar(50),[sppp] varchar(100),[spm

【SQL Server 2012】按倒序存储“分组统计”结果的临时表到新建表

程序预先说明: 本文访问的数据库是基于存有RDF三元组的开源数据库Localyago修改的库,其中只有一个表,表中有五个属性:主语subject.谓语predict.宾语object.主语的编号subid,宾语的编号objid.每条记录由(subject,predict,object,subid,objid)组成.其中当宾语为字符型而不是实体时(比如"2011"),编号默认为0.有以下数据表: 程序需求: 统计每个主语有多少相关的谓语属性(每个谓语可有多个宾语),即有多少以该实体作为主