sql小计汇总 rollup用法实例分析

 更新时间:2009年06月26日 17:47:28   作者:  
rollup在oracle ,sql-server里面都有有。
这里介绍sql server2005里面的一个使用实例:
CREATE TABLE tb(province nvarchar(10),city nvarchar(10),score int)
INSERT tb SELECT '陕西','西安',3
UNION ALL SELECT '陕西','安康',4
UNION ALL SELECT '陕西','汉中',2
UNION ALL SELECT '广东','广州',5
UNION ALL SELECT '广东','珠海',2
UNION ALL SELECT '广东','东莞',3
UNION ALL SELECT '江苏','南京',6
UNION ALL SELECT '江苏','苏州',1
GO
1、 只有一个汇总
select province as 省,sum(score) as 分数 from tb group by province with rollup
结果:
广东 10
江苏 7
陕西 9
NULL 26

select case when grouping(province)=1 then '合计' else province end as 省,sum(score) as 分数 from tb group by province with rollup
结果:
广东 10
江苏 7
陕西 9
合计 26

2、两级,中间小计最后汇总
select province as 省,city as 市,sum(score) as 分数 from tb group by province,city with rollup
结果:
广东 东莞 3
广东 广州 5
广东 珠海 2
广东 NULL 10
江苏 南京 6
江苏 苏州 1
江苏 NULL 7
陕西 安康 4
陕西 汉中 2
陕西 西安 3
陕西 NULL 9
NULL NULL 26
select province as 省,city as 市,sum(score) as 分数,grouping(province) as g_p,grouping(city) as g_c from tb group by province,city with rollup

结果:
广东 东莞 3 0 0
广东 广州 5 0 0
广东 珠海 2 0 0
广东 NULL 10 0 1
江苏 南京 6 0 0
江苏 苏州 1 0 0
江苏 NULL 7 0 1
陕西 安康 4 0 0
陕西 汉中 2 0 0
陕西 西安 3 0 0
陕西 NULL 9 0 1
NULL NULL 26 1 1

select case when grouping(province)=1 then '合计' else province end 省,
case when grouping(city)=1 and grouping(province)=0 then '小计' else city end 市,
sum(score) as 分数
from tb group by province,city with rollup
结果:
广东 东莞 3
广东 广州 5
广东 珠海 2
广东 小计 10
江苏 南京 6
江苏 苏州 1
江苏 小计 7
陕西 安康 4
陕西 汉中 2
陕西 西安 3
陕西 小计 9
合计 NULL 26

相关文章

  • 写出高性能SQL语句的35条方法分析

    写出高性能SQL语句的35条方法分析

    高性能的SQL语句能提高页面的执行效率,让你的服务器运行的更为流畅,所以大家在以后的使用过程中,尽量的考虑到效率。
    2009-10-10
  • 使用sqlalchemy-gbasedbt连接GBase 8s数据库的步骤详解

    使用sqlalchemy-gbasedbt连接GBase 8s数据库的步骤详解

    这篇文章主要介绍了使用sqlalchemy-gbasedbt连接GBase 8s数据库的步骤详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • 详细聊聊关于sql注入的一些零散知识点

    详细聊聊关于sql注入的一些零散知识点

    SQL注入攻击是通过将恶意的SQL查询或添加语句插入到应用的输入参数中,再在后台SQL服务器上解析执行进行的攻击,它目前是黑客对数据库进行攻击的最常用的手段之一,这篇文章主要给大家介绍了关于sql注入的一些零散知识点,需要的朋友可以参考下
    2021-10-10
  • 在PostgreSQL中实现递归查询的教程

    在PostgreSQL中实现递归查询的教程

    这篇文章主要介绍了在PostgreSQL中实现递归查询的教程,包括在递归查询内排序等方法的介绍,需要的朋友可以参考下
    2015-04-04
  • postgres 数据库中的数据转换

    postgres 数据库中的数据转换

    postgres8.3以后,字段数据之间的默认转换取消了。如果需要进行数据变换的话,在postgres数据库中,我们可以用"::"来进行字段数据的类型转换。
    2009-07-07
  • SQL注入之基于布尔的盲注详解

    SQL注入之基于布尔的盲注详解

    首先说明的盲注是注入的一种,指的是在不知道数据库返回值的情况下对数据中的内容进行猜测,实施SQL注入。盲注一般分为布尔盲注和基于时间的盲注。这篇文章主要讲解的是基于布尔的盲注。下面来一起看看吧。
    2016-09-09
  • 复制数据库表中两个字段数据的SQL语句

    复制数据库表中两个字段数据的SQL语句

    今天为表新添加一个字段,但又想与表中的另一个字段值相同,由于数据过多想通过sql语句实现,经测试下面的这句话确实很好用
    2013-07-07
  • 一次因表变量导致SQL执行效率变慢的实战记录

    一次因表变量导致SQL执行效率变慢的实战记录

    这篇文章主要给大家介绍了一次因表变量导致SQL执行效率变慢的实战记录,本文通过图文以及示例代码介绍的非常详细,对大家学习或者了解sql具有一定的参考学习价值,需要的朋友可以参考下
    2021-11-11
  • SQL中Having与Where的区别及注意

    SQL中Having与Where的区别及注意

    这篇文章给大家详细的介绍了SQL中Having与Where的区别,以及这两者的注意事项,文中还分享了Having与Where的示例代码,相信对大家的理解和学习很有帮助,感兴趣的朋友们可以参考借鉴,有需要的朋友们可以一起学习学习。
    2016-11-11
  • sql中left join的效率分析与提高效率方法

    sql中left join的效率分析与提高效率方法

    网站随着数据量与访问量越来越大,访问的速度变的越来越慢,于是开始想办法解决优化速度慢的原因,下面是对程序中一条sql的分析与提高效率的过程
    2018-03-03

最新评论