MS SQL Server 实战 统计与汇总重复记录

news2024/12/24 6:05:57

 

目录

需求

范例运行环境

数据样本设计

功能实现

上传EXCEL文件到数据库

分组统计 SQL 语句

分组汇总 SQL 语句

having 语句过滤最终统计结果

小结


需求

在日常的数据管理应用中,统计和汇总重复记录的情况是经常遇到的一个问题,然后我们会根据统计结果进一步对数据进行合理化处理。比如我们有一组题库数据,主要包括题目和选项字段(如单选题目、多选题目和判断题目) ,一个合理的数据存储应该至少保证这些题目在分类中不应该出现重复题目标题数据。本文将介绍如何利用 group by 、with rollup 、having 语句来实现这一统计汇总需求,主要实现如下功能:

(1)上传 EXCEL 版试题题库到 MS SQL SERVER 数据库进行导入

(2)通过 group by 语句统计记录个数

(3)通过 group by 语句 和 with rollup 统计和汇总重复情况

(4)通过 having 子句进一步筛选出统计情况

范例运行环境

操作系统: Windows Server 2019 DataCenter

数据库:Microsoft SQL Server 2016

.netFramework 4.7.2

数据样本设计

假设有 EXCEL 数据题库,如图我们假设设计了错误的数据源,排序号为第207题至212题的题目列为重复值。

 

题库表 [exams] 设计如下:

序号字段名类型说明备注
1sortidint排序号题号,唯一性
2etypenvarchar试题类型如多选、单选
3titlenvarchar题目
4Anvarchar选项A
5Bnvarchar选项B
6Cnvarchar选项C
7Dnvarchar选项D

功能实现

上传EXCEL文件到数据库

导入功能请参阅我的文章《C#实现Excel合并单元格数据导入数据集》这里不再赘述。

分组统计 SQL 语句

首先通过 group by  按试题类型和题目进行分组统计,并使用 count、min、max 聚合函数统计题目重复的个数,出现的最小排序号和最大排序号,代码如下:

	SELECT title,etype,count(title) ct,min(sortid) s1,max(sortid) s2

	  FROM [exams]  
	  
	  group by etype,Title

运行结果如下图:

分组汇总 SQL 语句

使用 with ROLLUP 语句选项,如下语句:

	SELECT title,etype,count(title) ct,min(sortid) s1,max(sortid) s2

	  FROM [exams] 
	  
	  group by etype,Title with ROLLUP 

运行结果如下图:

如图可以看到统计中会加入汇总的记录行,NULL值,比如其中判断题共有293题,一共统计总数为654题。 

having 语句过滤最终统计结果

前面的语句起到了统计每一个题目的和每一种题型的统计和汇总作用,我们需要对结果集进一步过滤,就需要使用 having 条件语句,写法如下:

	SELECT title,etype,count(title) ct,min(sortid) s1,max(sortid) s2

	  FROM [exams] 
	  
	  group by etype,Title with ROLLUP 
	  having count(title)>1

在查询分析器运行SQL语句,显示如下图:

如图可以看出,统计汇总结果清晰的反映出了重复记录的情况,即 count(title)>1 的 ct 字段值,值大于1 的表示该题目出现的个数。另外命令结果增加了4个行,包括单选题统计共 248 题,多选题统计共 113 题,判断题统计共 293 题,总数统计共 654 题。 

小结

我们可以继续完善对结果的分析,以标注汇总行的提示信息,可通过如下语句实现:

SELECT case when title is null then isnull(etype,'总数')+'统计情况:' else title end title
	  ,etype,count(title) ct,min(sortid) s1,max(sortid) s2

	  FROM [exams] 
	  
	  group by etype,Title with ROLLUP 
	  having count(title)>1

运行查询分析器,结果显示如下:

主要是通过 case when 语句对 title 字段进行判断 ,为NULL值的表示汇总行,则进行 isnull(etype,'总数')+'统计情况:' 的字符串拼接,etype字段为 NULL 值的表示总数的统计行。

更多详情请参考如下链接:

https://learn.microsoft.com/zh-cn/previous-versions/sql/sql-server-2008-r2/ms177673(v=sql.105)?redirectedfrom=MSDN

https://learn.microsoft.com/zh-cn/previous-versions/sql/sql-server-2008-r2/ms180199(v=sql.105) 

至此关于统计汇总重复记录的问题就介绍到这里,感谢您的阅读,希望本文能够对您有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2196759.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

文字转语音软件哪个好?这里告诉你

在英语学习的众多环节中,听力练习无疑是至关重要的一环。 然而,平时缺乏英语环境,如何高效地利用身边的英语材料进行听力训练呢?这时,英语文字转语音工具就很重要了! 今天,就为大家介绍五款优…

【C++】认识匿名对象

文章目录 目录 文章目录前言一、对匿名对象的解读二、匿名对象的对象类型三、匿名对象的使用总结 前言 在C中,匿名对象是指在没有呗命名的情况下创建的临时对象。它们通常在单个语句中执行一系列操作或调用某个函数,并且不需要将结果存放进变量中。 匿名…

常用动词敬语形式大揭秘,柯桥零基础日语培训

一、常用动词的敬语形式 1. する(做) • 尊敬语: なさる (Nasaru) 例:社長はよく運動をなさいます。 (社长经常锻炼。) • 谦逊语: いたす (Itasu) 例:この仕事は私がいたします。 &…

Java解析图形mdb矢量mdb

Java解析图形mdb矢量mdb 背景:项目中需要解析图形mdb,同事积累下的代码无法读取复杂图形;终于在某位大佬的博客下发现新的 解析方法,特此整理记录下。原理:jackcess(assess提供解析mdb属性)、es…

C++模拟实现二叉搜索树

目录 1.二叉搜索树的概念 2.二叉搜索树的性能分析 3.二叉搜索树的结构和中序遍历 3.1二叉搜索树中节点的结构 3.2二叉搜索树的结构 3.3中序遍历 4.二叉搜索树的插入 5.二叉搜索树的查找 6.二叉树搜索树的删除 7. 二叉搜索树的默认成员函数 8.参考代码 9.二叉搜…

常见的图像处理算法:Canny边缘检测

一、Canny边缘检测算子的由来 Canny 边缘检测算子是一种多级检测算法。1986 年由 John F. Canny 提出,同时提出 了边缘检测的三大准则: 1、低错误率的边缘检测:检测算法应该精确地找到图像中的尽可能多的边缘,尽可能的减少漏检…

【一起学Rust | 框架篇 | Tauri2.0框架】高级概念之安全特性的权限与能力

文章目录 前言一、开发前准备1. 准备项目2. 需求分析1. 监听系统热键2. 切换窗口无边框3. 切换窗口全屏 二、安装插件三、前端实现功能四、配置权限 前言 当前时间为 2024 年 9 月,距离Tauri 2.0 的 RC 版本发布迄今已近一个月。从 Tauri 官方渠道可以看出&#xf…

李飞飞:我不知道什么是AGI

图片来源:Stanford University 你对人工通用智能(AGI)感到困惑吗?这就是 OpenAI 执着于最终以“造福全人类”的方式创造的东西。你可能想认真对待他们,因为他们刚筹集了 66 亿美元以更接近这个目标。 但如果你仍然在…

揭秘Sui存储基金:灵活且可持续的链上数据管理解决方案

链上数据存储的方法常常被忽视,因为所使用的机制通常是传统和常见的。然而,在去中心化网络中,数据存储对确保数据完整性和长期可访问性至关重要。Sui的链上存储与其他区块链有所不同。 Sui存储基金是为了解决链上数据永久存储问题而设计的核…

企业架构系列(16)ArchiMate第14节:实施和迁移视角

在企业架构中,为了有效地规划和管理架构的变更与实施,通常会使用不同的视角来描述架构的不同方面。本篇涉及到三个主要视角:项目视角、迁移视角以及实施与迁移视角。 一、实施和迁移视角概览 1.项目视角 元素与关系:关注项目本身…

“网络安全等级保护测评入门:基础概念与重要性“

网络安全等级保护测评(简称“等保测评”)是依据国家网络安全等级保护制度,对信息系统安全等级进行评估和评定的过程。它是提高信息系统安全性、保障信息安全的重要手段。以下是关于等保测评的基础概念与重要性的详细解读: 一、等…

【钱拿不回来了,中介说开源吧】《刚体旋转的四元数模型及捷联惯性导航系统中定向算法》

《刚体旋转的四元数模型及捷联惯性导航系统中定向算法》 1. 摘要 本文深入探讨了四元数在刚体旋转描述中的核心作用以及其在捷联惯性导航系统(SINS)中确定方向的算法。详细阐述了四元数的理论基础、数学性质和实际应用优势,包括与卡丹角和欧…

小红书AI商单变现,单月收入10000+,真猛!

AI相关的话题在这两年来一直很火爆,很多行业也纷纷和AI结合起来, 从而达到更好的变现效果,这也是未来的发展趋势, 有这个工具确实能给我们的工作和生活带来一些便利 之前也拆解过很多类似的玩法, 比如AI古诗词、数…

软件测试之压力测试

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 压力测试 压力测试是一种软件测试,用于验证软件应用程序的稳定性和可靠性。压力测试的目标是在极其沉重的负载条件下测量软件的健壮性和错误处理能力&…

GSLAM——一个通用的SLAM架构和基准

GSLAM: A General SLAM Framework and Benchmark 开源地址 摘要: SLAM技术最近取得了许多成功,并吸引了高科技公司的关注。然而,如何同一现有或新兴算法的界面,一级有效地进行关于速度、稳健性和可移植性的基准测试仍然是问题。本…

芯片干货 | 同步内置MOS升压恒压5V/2A芯片FP6276B,输入限流可调

芯片概述 FP6276B是一个具有PWM/PSM控制的电流模式增压直流-直流转换器。它的PWM电路内置40mΩ高侧开关和40mΩ低侧开关使该调节器高高效。内部补偿网络还将外部组件计数最小化到只有6个。一个内部的0.6V电压被连接到误差放大器的非反相输入作为精度参考电压。内置的软启动功能…

Llama 3.2 智能代理开发教程

构建研究代理可能很复杂,但使用 LangChain 和 Ollama,它会变得更加简单和模块化。 在本教程中,我们将向你展示如何基于Llama 3.2创建一个研究代理,该代理可以路由查询、执行网络搜索并使用工作流和 LLM 的组合生成详细响应。最后…

我的书第三次重印啦,做一波活动,参与可抽现金红包~

大家好,我是拭心,好久不见。 四月份我的《Android 性能优化入门与实战》顺利出版,在朋友们帮忙宣传下,初印的两三千册很快卖完,四月份第二次重印,五个月后,又迎来了第三次重印。 这样的销量算不…

如何解决Lenovo笔记本电脑很快就自动休眠,自动锁屏,需要密码登录的问题

前段时间电脑经常会很快就锁屏了,只要离开电脑1分钟不到,就自动锁屏,然后就要输入密码登录,太烦了,后来百度和谷歌了不少帖子和方案,给的建议都是调整电源选项之类的参数。 尝试了各种修改参数&#xff0c…

栈和队列--DS

1. 栈(Stack) 1.1 栈的定义 **栈是一种特殊的线性表,其只允许在固定的一端(栈顶)进行元素插入和删除元素操作。**进行数据插入和删除操作的一段称为栈顶,另一端则称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)原则。 1.2 栈的核心操…