sql server数据分组查询脚本分析

发布时间:2019-12-26编辑:脚本学堂
本文介绍下,在sql server中进行数所分组查询的一个例子,通过具体的分析,了解其应用场合,有需要的朋友参考下吧。

1,使用排序使数据有序
通常,所有数据真正需要的仅仅是按某种顺序排列。SQL的ORDER BY语句可以以字母或数字顺序组织数据。
因此,相似的值按组排序在一起。
然而,这个分组时排序的结果,并不是真的分组。ORDER BY显示每条记录而分组可能代表很多记录。

2,进行分组除去重复值
排序和分组之间的最大区别:
排序的数据显示所有记录(在限定标准范围之内),而分组数据不是显示所有记录。
GROUP BY语句对于同样的值只显示一条记录。
例如,下面的语句中的GROUP BY语句对数据源中重复出现的数据只返回唯一的zip编码列。
 

SELECT ZIP FROM Customers GROUP BY ZIP

只包括由GROUP BY和SELECT语句共同定义的那些记录,换句话说,SELECT列表必须满足GROUP BY列表,有一个例外就是SELECT列表可以包含聚合函数(GROUP BY语句不允许使用聚合函数)。

注意:GROUP BY语句不会对结果分组进行排序。为了使分组按字母或数字有序排列,需要添加ORDER BY语句。
此外,在GROUP BY语句中不能引用使用了别名的字段。分组栏目必须是潜在的数据,但它们并不需要显示在结果中。

3,在分组之前进行数据筛选
你可以添加一个WHERE语句来筛选有GROUP BY所得分组中的数据。
例如,下面的语句只返回肯塔基州顾客的唯一ZIP编码列。
 

SELECT ZIP FROM CustomersWHEREState = 'KY' GROUP BY ZIP

注意:
WHERE语句是在GROUP BY语句求值之前进行数据过滤的。
与GROUP BY语句一样,WHERE语句也不支持聚合函数。

4,返回所有分组
当使用WHERE语句过滤数据时,结果分组中只显示你指定的那些记录,而符合分组定义但是不满足过滤条件的数据不会包含在某个分组中。
当想在分组中包含所有数据时添加关键字ALL即可,这时WHERE条件就不起作用。

例如,在前面的例子中,添加关键字ALL就会返回所有的ZIP分组,而不是仅在肯塔基州的那些。
 

复制代码 代码示例:

create table ArticleInfo
(
ArticleId int identity(1,1) primary key,
ArticleTitle nvarchar(100),
ArticleContent nvarchar(100),
ArticlePublishTime datetime,
ArticleBelong nvarchar(100),
ArticleClickNum int
)
go

select *from (select row_number() over (partition by ArticleId order by
ArticlePublishTime desc) rank,* from ArticleInfo)
a where ArticleId=2

select * from ArticleInfo