代码改变世界

sql语句在表格底部生成小计以及union的注意事项

2017-10-19 22:17  alwaystone  阅读(405)  评论(0)    收藏  举报

我们都知道sql中的合计使用sum方法,并且需要配合这group by这样的方法,而这样产生的数据必然会带有其他字段,但这可能不是我们需要的结果,

所以在这里我列出我所要说的结果样式

这样的结果可以使用两种方法来实现,

第一种是本人最为推荐的方法

select 
    case when ename is null then '总计'
        else ename end myname 
  ,sum(sal) sal
from emp where deptno=20
GROUP BY ename 
with ROLLUP

第二种是使用 union all

select ename ,SUM(sal) sal from emp where deptno = 20
GROUP BY ename
UNION ALL
select '总计' as ename,SUM(sal) from emp where deptno = 20

大家可以根据个人喜欢选择使用哪一种,都能将功能实现,但是本人更推荐第一种

另外选择使用第二种的朋友需要注意的是union的使用,有以下注意事项:

1、对重复结果的处理:UNION在进行表链接后会筛选掉重复的记录,Union All不会去除重复记录。
2、对排序的处理:Union将会按照字段的顺序进行排序;UNION ALL只是简单的将两个结果合并后就返回。
从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复数据且不需要排序时的话,那么就使用UNION ALL。