分组汇总 | 分组汇总去重_了解几种汇总的用法

Posted cdpj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分组汇总 | 分组汇总去重_了解几种汇总的用法相关的知识,希望对你有一定的参考价值。

本来也是想找2005年时期常访问的一个Oracle论坛的,没找到,就找到了别人问问题的这个链接,那就再当练练指法吧
https://bbs.bccn.net/thread-486056-1-1.html

请教SQL怎么写?

  业务说明:查询出所有公司的发料总额,若该公司有多条发料运费,则将多条发料运费求和,每个公司只显示一条数据。
      例如:数据库中有字段  公司(butxt) 运费状态 status  运费  zyf
        我写的SQL查出来的数据显示结果如下:
            公司       运费状态      运费
            西安公司       发料        100
            西安公司       发料        200
            宝鸡公司       发料        100
        但我想要的结果是:
             公司         运费状态       运费
            西安公司        发料          300
            宝鸡公司        发料          100
            
如下是我写的SQL该如何修改:
   SELECT BUTXT,STATUS,
            SUM(CASE WHEN Z.STATUS=‘发料‘ THEN Z.ZFY ELSE ‘0‘ END)AS FLZE,
            SUM(CASE WHEN Z.STATUS=‘退料‘ THEN Z.ZFY ELSE ‘0‘ END)AS TLZE
            FROM EKKO
            GROUP BY BUTXT,STATUS,ZYF
            ORDER BY BUTXT ASC
            注:FLZE是发料总额   TLZE是退料总额
    请大神们多多指导,该如何修改SQL,谢谢

-----------------------------------------------------------------------
select * from tbGroupSum0605
-----------------------------------------------------------------------
--实现方法1
select fCompany,fFeeStatus,sum(fFee) as [某家公司的总数 ]     --如果fFeeStatus状态只有一种时可以这样做,如果有多种就不可这样做了
from tbGroupSum0605
group by fCompany,fFeeStatus
order by fCompany asc
-----------------------------------------------------------------------
--实现方法2
select fCompany,
          fFeeStatus,
          sum(case  when fFeeStatus=发料 then fFee end) as [某家公司的总数]  --如果fFeeStatus状态有多总,增加条件就可以了   
from tbGroupSum0605                                                          --条件有几百种怎么办?    
group by fCompany,fFeeStatus
-----------------------------------------------------------------------
--实现方法3
select distinct
          fCompany,
          fFeeStatus,
          sum(fFee) over(Partition by fCompany ) AS [某家公司的总数 ]
from tbGroupSum0605
-----------------------------------------------------------------------

方法1、2、3的运行结果:

技术图片

 

 

--此步只是熟悉一下,但不属于上面的解决方法,别与上面的混淆
select fCompany,
          fFeeStatus,
          sum(fFee) over(Partition by fCompany ) AS [显示了有3笔交易,某家公司发料的总数]
from tbGroupSum0605

运行结果:

技术图片

 

 








以上是关于分组汇总 | 分组汇总去重_了解几种汇总的用法的主要内容,如果未能解决你的问题,请参考以下文章

分析函数系列之sum(col1) over(partition by col2 order by col3):实现分组汇总或递增汇总

oracle中group by用法

快速回顾MySQL:汇总和分组

oracle 中怎么算sum分组取值/汇总值啊?一直没有头绪

快速回顾MySQL:汇总和分组

按外键和日期分组数据,按日期汇总