如何使用ADO.NET实现数据库数据分组、应用Having语句以及限制结果集行数进行分页查询?

2026-04-02 13:041阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计496个文字,预计阅读时间需要2分钟。

如何使用ADO.NET实现数据库数据分组、应用Having语句以及限制结果集行数进行分页查询?

1. 数据分组按年龄:sqlSELECT Fage, COUNT(*) FROM T_Employee GROUP BY Fage

2. 数据分组按子集:sqlSELECT Fage, COUNT(*) FROM T_Employee GROUP BY 子

3. 按照年龄段进行分组统计:sqlSELECT Fage, COUNT(*) FROM T_Employee GROUP BY 年龄段

一、数据分组1、按照年龄进行分组统计各个年龄段的人数SELECTFAge,Count(*)FROMT_EmployeeGROUPBYFage2、GROUPBY子

一、数据分组

1、按照年龄进行分组统计各个年龄段的人数:

SELECT FAge,Count(*) FROM T_Employee GROUP BY Fage

 

2、GROUP BY子句必须放到WHERE语句的之后。

 

3、没有出现在GROUP BY子句中的列是不能放到SELECT语句后的列名列表中的 (聚合函数中除外)。

错误:  SELECT FAge,FSalary FROM T_Employee GROUP BY FAge

正确:  SELECT FAge,AVG(FSalary) FROM T_Employee GROUP BY FAge

 

4、WHERE子句从数据源中去掉不符合其搜索条件的数据。

GROUP BY子句搜集数据行到各个组中,统计函数为各个组计算统计值。

二、Having语句(分组后查询条件)

5、在Where中不能使用聚合函数,必须使用Having,Having要位于Group By之后:    

如何使用ADO.NET实现数据库数据分组、应用Having语句以及限制结果集行数进行分页查询?

SELECT FAge,COUNT(*) AS 人数 FROM T_Employee  GROUP BY FAge  HAVING COUNT(*)>1

 

6、注意Having中不能使用未参与分组的列,Having不能替代where。作用不一样,Having是对组进行过滤。

7、顺序示意图:

8、例:

SELECT FAge,Count(*) FROM T_Employee where Count(*)>1 GROUP BY Fage;//聚合函数不应出现在WHERE子句中SELECT FAge,Count(*) FROM T_Employee GROUP BY FageHaving Count(*)>1select FAge,Count(*) FROM T_Employee where FSalary>2000 GROUP BY Fage;select FAge,Count(*) FROM T_Employee GROUP BY Fagehaving FSalary>2000 //错,having是对分组后信息的过滤,能用的列和select中能用的列是一样。//having无法代替where。

三、限制结果集行数(分页经常用到)

9、SELECT top 5 * FROM T_Employee order by FSalary Desc

 

10、检索按照工资从高到低排序检索从第六名开始一共三个人的信息 :    

SELECT top 3 * FROM T_EmployeeWHERE FNumber NOT IN (SELECT TOP 5 FNumber FROM T_Employee ORDER BY FSalary DESC)ORDER BY FSalary DESC

11、SQLServer2005后增加了Row_Number函数简化实现,后面会讲。

Row_Number函数:临时产生一个编号,在数据库里是不存在的,分组的时候用到。

本文共计496个文字,预计阅读时间需要2分钟。

如何使用ADO.NET实现数据库数据分组、应用Having语句以及限制结果集行数进行分页查询?

1. 数据分组按年龄:sqlSELECT Fage, COUNT(*) FROM T_Employee GROUP BY Fage

2. 数据分组按子集:sqlSELECT Fage, COUNT(*) FROM T_Employee GROUP BY 子

3. 按照年龄段进行分组统计:sqlSELECT Fage, COUNT(*) FROM T_Employee GROUP BY 年龄段

一、数据分组1、按照年龄进行分组统计各个年龄段的人数SELECTFAge,Count(*)FROMT_EmployeeGROUPBYFage2、GROUPBY子

一、数据分组

1、按照年龄进行分组统计各个年龄段的人数:

SELECT FAge,Count(*) FROM T_Employee GROUP BY Fage

 

2、GROUP BY子句必须放到WHERE语句的之后。

 

3、没有出现在GROUP BY子句中的列是不能放到SELECT语句后的列名列表中的 (聚合函数中除外)。

错误:  SELECT FAge,FSalary FROM T_Employee GROUP BY FAge

正确:  SELECT FAge,AVG(FSalary) FROM T_Employee GROUP BY FAge

 

4、WHERE子句从数据源中去掉不符合其搜索条件的数据。

GROUP BY子句搜集数据行到各个组中,统计函数为各个组计算统计值。

二、Having语句(分组后查询条件)

5、在Where中不能使用聚合函数,必须使用Having,Having要位于Group By之后:    

如何使用ADO.NET实现数据库数据分组、应用Having语句以及限制结果集行数进行分页查询?

SELECT FAge,COUNT(*) AS 人数 FROM T_Employee  GROUP BY FAge  HAVING COUNT(*)>1

 

6、注意Having中不能使用未参与分组的列,Having不能替代where。作用不一样,Having是对组进行过滤。

7、顺序示意图:

8、例:

SELECT FAge,Count(*) FROM T_Employee where Count(*)>1 GROUP BY Fage;//聚合函数不应出现在WHERE子句中SELECT FAge,Count(*) FROM T_Employee GROUP BY FageHaving Count(*)>1select FAge,Count(*) FROM T_Employee where FSalary>2000 GROUP BY Fage;select FAge,Count(*) FROM T_Employee GROUP BY Fagehaving FSalary>2000 //错,having是对分组后信息的过滤,能用的列和select中能用的列是一样。//having无法代替where。

三、限制结果集行数(分页经常用到)

9、SELECT top 5 * FROM T_Employee order by FSalary Desc

 

10、检索按照工资从高到低排序检索从第六名开始一共三个人的信息 :    

SELECT top 3 * FROM T_EmployeeWHERE FNumber NOT IN (SELECT TOP 5 FNumber FROM T_Employee ORDER BY FSalary DESC)ORDER BY FSalary DESC

11、SQLServer2005后增加了Row_Number函数简化实现,后面会讲。

Row_Number函数:临时产生一个编号,在数据库里是不存在的,分组的时候用到。