zoukankan      html  css  js  c++  java
  • 分组统计并计算每组数量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,其中有下面两个不知道为什么废了)

  • 相关阅读:
    get和post区别
    cookie和session的区别
    节流和防抖
    eval()
    三次握手和四次挥手
    HTTP状态码
    AMD规范与CMD规范的区别?
    深拷贝和浅拷贝
    逆人性的人类出现,正常合理竞争该何去何从
    TestNG并发执行测试总结
  • 原文地址:https://www.cnblogs.com/PiaoMiaoGongZi/p/4630353.html
Copyright © 2011-2022 走看看