【SQL Server 2012】按倒序存储“分组统计”结果的临时表到新建表
程序预先说明:
本文访问的数据库是基于存有RDF三元组的开源数据库Localyago修改的库,其中只有一个表,表中有五个属性:主语subject、谓语predict、宾语object、主语的编号subid,宾语的编号objid。每条记录由(subject,predict,object,subid,objid)组成。其中当宾语为字符型而不是实体时(比如“2011”),编号默认为0。有以下数据表:

程序需求:
- 统计每个主语有多少相关的谓语属性(每个谓语可有多个宾语),即有多少以该实体作为主语的记录
- 由于结果非常巨大,所以需要将结果存储到数据库中的新建的一个表中,并按倒序存储
具体过程:
- 统计每个主语的谓词数目,输出(主语,主语id和主语属性数目),按每个主语的属性数目倒序输出:
select subject, subid, count(subject) as subprenum
from [Localyago].[dbo].[yago]
group by subject,subid
order by subprenum DESC;
group by实现分组统计,这里按subject分类,由于我们在select的时候选择了subject和subid,而select中的字段要么包含在group by语句里,要么被包含在聚合函数里,所以我们在这里的group by中也要写入subid,不然会报错
order by 是排序,默认从小到大输出,加上DESC就变成倒序、从大到小输出
得到如下结果:

2. 将查询结果的临时表按subprenum倒序存入新的表中,便于存储和查询
最基本的方式:
如果新表不存在
select * into 新表 from 旧表
如果新表不存在
insert into 新表 select * from 旧表
从而有:
select subject, subid, count(subject) as subprenum
into Localyago.dbo.subpre
from [Localyago].[dbo].[yago]
group by subject,subid;
order by subprenum;
然后发现虽然我们上一步查询的结果是有序的,但运行这个之后生成的新表,并没有按照subprenum排序,顺序是乱的。
检索之后发现这是由于SQL Server自身的局限,如果有特殊需要,要求临时表里面的数据有序,则可以通过【创建聚集索引】来解决这个问题。具体请参考博文:https://www.cnblogs.com/kerrycode/p/5172333.html
从而改进代码如下:
select subject, subid, count(subject) as subprenum
into Localyago.dbo.subpre
from [Localyago].[dbo].[yago]
where 1=0
group by subject,subid;
create clustered index inx_subpre on Localyago.dbo.subpre(subprenum DESC);--创建聚集索引,按subprenum倒序排序
insert into Localyago.dbo.subpre
select subject, subid, count(subject) as subprenum
from [Localyago].[dbo].[yago]
where subid !=0
group by subject,subid
order by subprenum;
这样运行之后得到的新表subpre里的记录就是按照subprenum倒序排序了
如下:

【SQL Server 2012】按倒序存储“分组统计”结果的临时表到新建表的更多相关文章
- 在SQL Server 2012中如何使用分组集
作者:Itzik Ben-Gan 翻译:张洪举 此文摘自作者的<Microsoft SQL Server 2012 T-SQL基础>. 分组集就是你据以分组的一个属性集.传统上,SQL中 ...
- SQL Server 2012 列存储索引分析(翻译)
一.概述 列存储索引是SQL Server 2012中为提高数据查询的性能而引入的一个新特性,顾名思义,数据以列的方式存储在页中,不同于聚集索引.非聚集索引及堆表等以行为单位的方式存储.因为它并不要求 ...
- SQL Server 2012 列存储索引分析(转载)
一.概述 列存储索引是SQL Server 2012中为提高数据查询的性能而引入的一个新特性,顾名思义,数据以列的方式存储在页中,不同于聚集索引.非聚集索引及堆表等以行为单位的方式存储.因为它并不要求 ...
- 统计sql server 2012表的行数
--功能:统计sql server 2012表的行数 SELECT a.name, a.object_id, b.rows, b.index_id FROM sys.tables AS a INNER ...
- (数据科学学习手册28)SQL server 2012中的查询语句汇总
一.简介 数据库管理系统(DBMS)最重要的功能就是提供数据查询,即用户根据实际需求对数据进行筛选,并以特定形式进行显示.在Microsoft SQL Serve 2012 中,可以使用通用的SELE ...
- SQL Server 2012 数据库笔记
慕课网 首页 实战 路径 猿问 手记 Python 手记 \ SQL Server 2012 数据库笔记 SQL Server 2012 数据库笔记 2016-10-25 16:29:33 1 ...
- SQL Server 2012 各版本功能比较
有关不同版本的 SQL Server 2012 所支持的功能的详细信息. 功能名称 Enterprise 商业智能 Standard Web Express with Advanced Service ...
- 【转】Microsoft® SQL Server® 2012 Performance Dashboard Reports
http://www.cnblogs.com/shanyou/archive/2013/02/12/2910232.html SQL Server Performance Dashboard Repo ...
- SQL Server 2012 案例教程(贾祥素)——学习笔记
第2章 SQL Server 2012概述 1.SQL(Structed Query Language),结构化查询语言. 2.SSMS(SQL Server Mangement Studio),SQ ...
随机推荐
- C++_代码重用4-多重继承
继承使用时要注意,默认是私有派生.所以要公有派生时必须记得加关键字Public. MI(Multi Inheritance)会带来哪些问题?以及如何解决它们? 两个主要问题: 从两个不同的基类继承同名 ...
- request.getRequestDispatcher()跳转+中文乱码
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, ...
- bzoj1934 Vote 善意的投票 最小割(最大匹配)
题目传送门 题目大意:很多小朋友,每个小朋友都有自己的立场,赞成或者反对,如果投了和自己立场不同的票会得到一个能量.又有很多朋友关系,如果一个人和他的一个朋友投的票不同,也会得到一个能量,现在问,通过 ...
- hdu3966 Aragorn's Story 树链剖分
题目传送门 题目大意: 有n个兵营形成一棵树,给出q次操作,每一次操作可以使两个兵营之间的所有兵营的人数增加或者减少同一个数目,每次查询输出某一个兵营的人数. 思路: 树链剖分模板题,讲一下树链剖分过 ...
- VBS常用脚本及其解说一览
取得本机IP strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strCo ...
- 不要重复发明轮子-C++STL
闫常友 著. 中国铁道出版社. 2013/5 标准的C++模板库,是算法和其他一些标准组件的集合. . 1.类模板简介 2.c++中的字符串 3.容器 4.c++中的算法 5.迭代器 6.STL 数值 ...
- [转] Ubuntu安装Fcitx以及Fcitx输入中文不显示候选词框的解决办法
[From] http://blog.csdn.net/qq_21397217/article/details/52447263 1. 安装Fcitx所需组件 $ sudo apt install f ...
- java String类型转 java.sql.time类型
String[] timePhase = reservationRuleInDTO.getTimePhase().split(",");List<ReservationTim ...
- js 判断各种数据类型 typeof 几种类型值
了解js的都知道, 有个typeof 用来判断各种数据类型,有两种写法:typeof xxx ,typeof(xxx) 如下实例: typeof 2 输出 number ...
- DIV水平垂直居中的CSS兼容写法
DIV水平垂直居中,非IE浏览器可以用CSS3来处理,IE浏览器中分别处理IE6和/IE7.IE8.IE9. 在IE低版本中,虽然大致上没有问题,但还是有一些细微的显示问题. 示例如下: <!D ...