这是一道常见的面试题,在实际项目中经常会用到。 需求:求出以产品类别为分组,各个分组里价格最高的产品信息。 实现过程如下:declare @t table( ProductID int, ProductName varchar(20), ProductType varchar(20), Price int)--测试数据insert @t select 1,name1,P1,3 union all select 2,name2,P1,5 union all select 3,name3,P2,4 union all select 4,name4,P2,4--做法一:找到每个组里,价格最大的值;然后再找出每个组里价格...
数据库环境:SQL SERVER 2005 现有一个产品销售实时表,表数据如下:字段name是产品名称,字段type是销售类型,1表示售出,2表示退货,字段num是数量,字段ctime是操作时间。 要求:在一行中统计24小时内所有货物的销售(售出,退货)数据,把日期考虑在内。 分析:这实际上是行转列的一个应用,在进行行转列之前,需要补全24小时的所有数据。补全数据可以通过系统的数字辅助表 spt_values来实现,进行行转列时,根据type和处理后的...
我们都知道用聚合函数count()可以统计表的行数。如果需要统计数据库每个表各自的行数(DBA可能有这种需求),用count()函数就必须为每个表生成一个动态SQL语句并执行,才能得到结果。以前在互联网上看到有一种很好的解决方法,忘记出处了,写下来分享一下。 该方法利用了sysindexes 系统表提供的rows字段。rows字段记录了索引的数据级的行数。解决方法的代码如下:代码如下: select schema_name(t.schema_id) as [Schema], t.name as...
对于语句的运行,除了执行计划本身,还有一些其他因素要考虑,例如语句的编译时间、执行时间、做了多少次磁盘读等。如果DBA能够把问题语句单独测试运行,可以在运行前打开下面这三个开关,收集语句运行的统计信息。 这些信息对分析问题很有价值。 代码如下: SET STATISTICS TIME ON SET STATISTICS IO ON SET STATISTICS PROFILE ON SET STATISTICS TIME ON ------------------------------------------------------------------...
在SQL语句调优的时候,大部分都会查看语句执行时间,究竟SQLSERVER显示出来的统计结果是什么意思? 下面看一下例子 比较简单的语句: 代码如下: 1 SET STATISTICS TIME ON 2 USE [pratice] 3 GO 4 SELECT * FROM [dbo].[Orders] 结果: 代码如下: SQL Server 分析和编译时间: CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。 SQL Server 执行时间: CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。 SQL Server 执行时间: CPU 时间 = 0 毫秒,占...
代码如下:--创建 test 表 ,插入数据CREATE TABLE test(code varchar(50), [values] varchar(10),[count] int)INSERT test SELECT 001, aa,1UNION ALL SELECT 001, bb,2UNION ALL SELECT 002, aaa,4UNION ALL SELECT 002, bbb,5UNION ALL SELECT 002, ccc,3; --方法一--将多行合并成一行,并做分组统计SELECT code, [values] = stuff(b.[values].value(/R[1], nvarchar(max)),,, ),[count] FROM (SELECT ...
WITH ROLLUP 在生成包含小计和合计的报表时,ROLLUP 运算符很有用。ROLLUP 运算符生成的结果集类似于 CUBE 运算符所生成的结果集。 代码如下: SELECT [Source], COUNT(*) AS OrderTotal FROM [ExternalOrder] Where OrderStatus=1 AND (CheckPayment=1 ) and TicketDate >= 2012-11-1 AND TicketDate < 2012-12-1 GROUP BY [Source] WITH ROLLUP Order by [Source] desc 结果集: 代码如下: Source OrderTotal ZongHengV2 215 Z...
自动更新统计信息的基本算法是: · 如果表格是在 tempdb 数据库表的基数是小于 6,自动更新到表的每个六个修改。 · 如果表的基数是大于 6,但小于或等于 500,更新状态每 500 的修改。 · 如果基数大于 500,表为更新统计信息时(500 + 20%的表)发生了更改。 · 表变量为基数的更改不会触发自动更新统计信息。 注意:此严格意义上讲,SQL Server 计算基数为表中的行数。 注意:除了基数,该谓语的选择性也会影响 AutoStats 生成。这...
而每次查询分析器寻找路径时,并不会每一次都去统计索引中包含的行数,值的范围等,而是根据一定条件创建和更新这些信息后保存到数据库中,这也就是所谓的统计信息。 如何查看统计信息 查看SQL Server的统计信息非常简单,使用如下指令: DBCC SHOW_STATISTICS('表名','索引名')所得到的结果如图1所示。 图1.统计信息统计信息如何影响查询 下面我们通过一个简单的例子来看统计信息是如何影响查询分析器。我建立一个...
1.计算每个人的总成绩并排名 select name,sum(score) as allscore from stuscore group by name order by allscore 2.计算每个人的总成绩并排名 select distinct t1.name,t1.stuid,t2.allscore from stuscore t1,( select stuid,sum(score) as allscore from stuscore group by stuid)t2where t1.stuid=t2.stuidorder by t2.allscore desc 3. 计算每个人单科的最高成绩 select t1.stuid,t1.name,t1.subject,t1.score from stuscore...
设置AccessCount字段可以根据需求在特定的时间范围内如果是相同IP访问就在AccessCount上累加。 代码如下:Create table Counter ( CounterID int identity(1,1) not null, IP varchar(20), AccessDateTime datetime, AccessCount int ) 该表在这儿只是演示使用,所以只提供了最基本的字段 现在往表中插入几条记录 insert into Counter select '127.0.0.1',getdate(),1 union all select '127.0.0.2',getdate(),1 union all select ...
按月查看历史数据的增长 SELECT[database_name] AS "Database",DATEPART(month,[backup_start_date]) AS "Month",AVG([backup_size]/1024/1024) AS "Backup Size MB"FROM msdb.dbo.backupsetWHERE [database_name] = NAdventureworks2012AND [type] = DGROUP BY [database_name],DATEPART(mm,[backup_start_date]); ? 查询数据库总数据条数 1、 select sum(c.row_count) as datacount from sys.indexes a , ...
SELECT count(*) FROM sys.objects WHERE type=U --统计表数量SELECT NAME FROM sys.objects WHERE type=U --列出表名称或者SELECT COUNT(*) FROM SysObjects Where XType=U --统计表数量SELECT Name FROM SysObjects Where XType=U --列出表名称
--用SQL统计SQLServer表存储空间大小 --遍历库中每个表的记录数及空间占用情况。CREATE TABLE #tmp ( name varchar(50), --表名 rows int, --记录数 reserved varchar(50), --保留空间 data varchar(50), --使用空间 index_size varchar(50), --索引使用空间 unused varchar(50)); --未用空间INSERT INTO #tmp (name,rows,reserved,data,index_size,unused) EXEC sp_msforeachTable "sp_spaceused ?"SELECT t.name,t.[rows],t.rese...
在SSMS中,启用实时查询统计信息后,我可以在窗口左下方看到执行百分比. 我想在Windows窗体上向最终用户显示此递增百分比.到目前为止,我尝试使用Visual Studio上的进度条实现此功能,但结果证明直到使用数据表,这都是不可能的. 即使我可以在标签上以文本格式显示增量百分比,也不要忘记进度条-就像在SSMS中一样,它将完成这项工作. 在C#中实现代码的任何建议都将有所帮助.解决方法:在SQL Server 2016 SP1上,可以通过dm_exec_query_profi...