`

SQL的分段统计查询语句

SQL 
阅读更多
SQL的分段统计查询语句
我们在数据的查询中经常会遇到这样的情况,查询每个月的记录的数量,而在数据库中并没有存在这样的字段,只是有一个日期的字段。例如下面的简单数据库:
--创建测试表test1
create table test1
(
id int identity(1,1),--编号,自动生成
name varchar(10),--记录名称
dates datetime--记录时间
)

我们假设有如下的记录:
ID NAME DATES
1 测试1 2007-12-20
2 测试2 2007-12-21
3 测试3 2007-12-22
4 测试4 2007-11-20
5 测试5 2007-11-21
6 测试6 2007-11-22
7 测试7 2007-10-20

我们想实现这样的效果:
年度 1月份 2月份 3月份 4月份 5月份 6月份 7月份 8月份 9月份 10月份 11月份 12月份
2007 0 0 0 0 0 0 0 0 0 1 0 0
2007 0 0 0 0 0 0 0 0 0 0 3 0
2007 0 0 0 0 0 0 0 0 0 0 0 3

我们可以这样来写SQL语句
select years as 年度,
case when months=1 then counts else 0 end 1月份 ,
case when months=2 then counts else 0 end 2月份 ,
case when months=3 then counts else 0 end 3月份 ,
case when months=4 then counts else 0 end 4月份 ,
case when months=5 then counts else 0 end 5月份 ,
case when months=6 then counts else 0 end 6月份 ,
case when months=7 then counts else 0 end 7月份 ,
case when months=8 then counts else 0 end 8月份 ,
case when months=9 then counts else 0 end 9月份 ,
case when months=10 then counts else 0 end 10月份 ,
case when months=11 then counts else 0 end 11月份 ,
case when months=12 then counts else 0 end 12月份
from
(
select year(dates) as years,month(dates) s,count(name)as counts
from test1 group by year(dates),month(dates)
) as test2
这样就可以达到我们想要的效果了。
看了上面的内容,下面来说一下原理,其实很简单的。首先,我们要找出数据库中每年每个月的记录的个数,那么,需要使用函数进行分组统计,分组的条件当然是年份和月份,所以还要使用时间函数,因此我们写出如下的SQL语句:
select year(dates) as years,month(dates) s,count(name)as counts
from test1 group by year(dates),month(dates)
这样,我们就可以把各年各月的记录的个数,统计出来了,怎样显示成我们需要的样式呢?使用case when来解决这个问题。
语法 CASE WHEN exrp1 THEN exrp2 [ELSE exrp3] END
其中,
exrp1为条件,我们这里是想把各个月份的数据都统计出来,那么首先我们要找到月份为1的数据,然后找到月份为2的数据,....以此类推,所以,我们要写 months=1,months=2,....
exrp2 为符合条件时显示的数据,则,如果月份为1,则显示1月份的数据counts
exrp3 为可选参数,当条件不成立时,显示的数据,如果此处不写,那么当条件不成立时,数据值为NULL。
这样我们就可以把各个月份的数据统计出来了。最后不要忘记起别名,将以上的内容进行总结,则得到我们前面给出的SQL语句了

分享到:
评论
2 楼 wodesunday 2015-07-24  
:idea:
1 楼 wodesunday 2015-07-24  
引用

相关推荐

    sql语句大全 分段详细讲解了很多语句的实例用法

    在“sql语句大全 分段详细讲解了很多语句的实例用法”这个资源中,我们可以期待深入理解SQL的核心概念和常见用法。 1. **SELECT语句**:这是SQL中最基本的查询语句,用于从数据库中检索数据。你可以根据需求选择...

    PostgreSQL 语法示例:分数段统计

    在处理大量数据时,经常需要对数据进行分段统计,以便更好地理解和分析数据分布情况。本篇将通过一个具体的示例来介绍如何使用PostgreSQL中的`CASE WHEN`语句结合`SUM`聚合函数实现区间或分数段统计,并且无需创建...

    SQL和VBA技术在气体分段计量中的应用.pdf

    文档标题“SQL和VBA技术在气体分段计量中的应用.pdf”和描述中指出了本篇文献的主题,即探讨如何在气体分段计量系统中应用SQL(结构化查询语言)和VBA(Visual Basic for Applications)这两种技术。文档的主要目的...

    经典SQL脚本大全

    │ │ 5.4.1 查询已用编号分布情况的示例(子查询法).sql │ │ 5.4.2 查询缺号分布情况的示例.sql │ │ 5.4.3 返回已用编号、缺号分布字符串的处理示例.sql │ │ 5.4.4 缺勤天数统计的处理示例.sql │ │ │ └...

    MySql 按时间段查询数据方法(实例说明)

    以下是查询当天数据的SQL语句示例: ```sql SELECT * FROM `table` WHERE DATE(时间字段) = CURDATE(); ``` 这条语句将返回时间字段完全匹配当前日期的所有记录。 2. 查询当月数据: 如果需要查询当月的数据,...

    Oracle SQL

    在SELECT语句中,字段名还可以结合使用SQL函数,如COUNT、MIN和MAX等,来进行更复杂的数据统计和计算。 在使用Oracle SQL时,应注意以下几点: - 确保操作的记录范围合理,避免一次性操作过多记录导致事务过大,...

    Sqlserver2000经典脚本

    学号.sql │ 开票统计--涉及到连号处理.sql │ 新编号查询示例(分类查询).sql │ 新编号查询示例.sql │ 日期流水号.sql │ 材料流水号.sql │ 流水号.sql │ 箱编号连号处理.sql ...

    利用PDMDP和SQL进行PDS管道材料统计.pdf

    以统计管子材料为例,可以使用SQL语句,结合商品代码、管径、商品描述和长度等信息,对焊接管和法兰管进行区分统计。例如,可以查询某个分区的焊接管,通过JOIN操作连接不同表格,计算管子的总长度。SQL查询提供了...

    SQL经典编程

    《SQL经典编程》一书专注于教授SQL语言的运用,旨在帮助程序员高效地撰写SQL语句,从而提升数据处理能力。SQL(Structured Query Language),结构化查询语言,是用于管理关系数据库的标准语言,无论是在Web应用、...

    Oracle官方文档CHM合集-SQL参考手册

    7. 子查询:介绍如何在SQL语句中嵌套查询,以满足更复杂的查询需求。 8. 分区和分段:Oracle9i引入了分区技术,可以提高大型表的查询性能。这部分会解释如何创建和管理分区表。 9. PL/SQL:PL/SQL是Oracle的内置...

    Oracle高性能SQL调整

    1. **SQL优化**:SQL查询是数据库操作的基础,优化SQL语句能显著提高数据库性能。这包括避免全表扫描,使用恰当的连接类型(如内连接、外连接),减少子查询,利用WHERE子句过滤不必要的数据,以及合理使用聚合函数...

    SQL SERVER 2000开发与管理应用实例

    本书全面系统地介绍了SQL Server开发和管理的应用技术,涉及安装和配置SQL Server、日期处理、字符处理、排序规则、编号处理、数据统计与汇总、分页处理、树形数据处理、数据导入与导出、作业、数据备份与还原、用户...

    15个常用的SQL Server高级语法

    例如,按英语成绩分段统计学生数量: ```sql SELECT english, COUNT(*) AS '学生数量' FROM Score GROUP BY english HAVING english >= 60 ``` 11. **WITH(CTE)**: 公共表表达式(CTE)提供临时的结果集...

    SQL如何实现阶梯式累加.txt

    在SQL查询中实现阶梯式累加,即根据特定条件对数据进行分段累加,是一种常见的需求。本篇文章将详细介绍如何通过SQL语句实现这种累加方式,并通过具体的例子来说明其应用场景及实现过程。 #### 1. 阶梯式累加的概念...

    php实现mysql数据库分表分段备份

    分卷导出的思路是通过统计SQL语句的长度,以字符为单位进行计算,当长度超过预设的分卷大小(例如1MB)时,将当前的SQL语句写入一个新的文件。这种方法是为了确保每个备份文件不会过大,方便管理和恢复。然而,这种...

    浅谈Oracle数据库性能的优化

    除了SQL语句执行过程的优化之外,多表联结和子查询也是常见的性能瓶颈。下面分别介绍这两种情况下的优化策略。 **3.1 多表联结优化** 多表联结在复杂查询中非常常见,但不恰当的联结策略会导致性能问题。为了提高...

    Ora 10G SQL Reference.chm 中文帮助文档

    12. **性能调优**:包括查询优化、索引策略、统计信息收集和SQL Trace工具的使用。 13. **备份与恢复**:涉及数据备份、增量备份、逻辑备份和恢复策略。 14. **XML支持**:Oracle 10g提供了对XML数据的内置支持,...

    有关oracle SQL 优化整理记录

    Oracle SQL 优化是数据库管理中的重要环节,它涉及到如何高效地执行SQL查询,减少资源消耗,提高系统性能。本文将围绕“Oracle SQL 优化”这一主题,深入探讨相关的知识点。 一、理解SQL执行过程 在Oracle数据库中...

    sql数字字典及使用说明

    在SQL中,数字字典通常指的是存储关于数据库中数字列的信息,如最大值、最小值、平均值等统计信息。这些信息对于数据分析、性能优化和查询设计都非常有用。以下是一些关于SQL数字处理的关键知识点: 1. **数值类型*...

    ORACLE SQL优化

    5. **SQL语句重写**:通过优化器或手动调整SQL语句,如避免全表扫描,使用JOIN代替子查询,或者使用连接运算优化多表查询,都是常见的优化手段。 6. **统计信息收集**:准确的统计信息有助于优化器做出更好的执行...

Global site tag (gtag.js) - Google Analytics