【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 ...
随机推荐
- css 之 BFC
1,定义 BFC为块级格式化上下文,也就是一块区域内的封闭空间,里面元素无论怎么样,都不会影响外部元素. 2,触发条件 html 根元素 display的值为 inline-block.table-c ...
- Apache Shiro(四)-登录认证和权限管理WEB支持(Servlet)
新建web项目 web.xml 修改web.xml,在里面加了个过滤器. 这个过滤器的作用,简单的说,就是 Shiro 入门里的TestShiro 这部分的工作,悄悄的干了. //加载配置文件,并获取 ...
- Oracle分析函数系列之first_value/last_value:在记录集中查找第一条记录和最后一条记录
[转自] http://blog.csdn.net/rfb0204421/article/details/7675911 注意:与max,min的区别,虽然也可以实现,但只是针对数字字段. 1.初始化 ...
- h5列表页的性能优化
//0.还原状态 caoke.loading=false $(".loadbtn").text("点击加载更多") //1 还没有任何数据的情况 if(data ...
- Python+Selenium之通过batch跑脚本
例如在执行路径C:\Portal_Scripts\Scripts下的脚本CreateIndicativeBOP.py,可以在notepad里面编写如下: @echo off cd C:\Portal ...
- yum 本地仓库搭建
一,配置yum源 设置镜像 挂载 查看是否挂在成功 复制镜像内容到opt下面 删除不相关内容 进入/mnt/Packages 安装生成缓存文件 选择这个结尾的 更新本地yum源 yum clean a ...
- JS及Dom练习 | 模态对话框及复选框操作
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- mac下安装win7虚拟机和导入linux虚拟机
- GoLang爬取花瓣网美女图片
由于之前一直想爬取花瓣网(http://huaban.com/partner/uc/aimeinv/pins/) 的图片,又迫于没时间,所以拖了很久. 鉴于最近在学go语言,就刚好用这个练手了. 预览 ...
- spring开发中commons-logging.jar包的功能
删除后程序会报错 Java.lang.NoClassDefFoundError 记录日志,通常和 log4j.jar共同使用 原因: 在 sun 开发 logger 前,apache 项目已经开发了 ...