请高手帮忙.MSSQL里的 ORDER BY ,GROUP BY,HAVING这三个的具体用法和分别

时间:2022-10-04 17:12:30
请高手帮忙.MSSQL里的 ORDER BY ,GROUP BY,HAVING这三个的具体用法和分别,最好用例子说明一下.我看了几天还是不太懂这几个.能不能把他们用在同一个子句中,如果可以,请举例说明.在此不胜感激.

8 个解决方案

#1


ORDER BY 是按什么来排序
,GROUP BY 是按组 来排!就是  BY后面 接什么 就按照 那个来排序!
,HAVING  是统计!

#2


谢谢上楼的回复
能不能举例说明一下
最好把它们都用上那就最好了

#3


ORDER BY 用于对数据按指定的列和方法排序。

select * from syscolumns order by id asc, colorder desc;
指示查询出的结果 按 id 正序排列, colOrder 逆序排列。


GROUP BY 用于汇总统计。 HAVING 用途和 WHERE类似,但用于对 GROUP BY 的结果进行过滤。
select id, count(1) from syscolumns group by id;
这条语句以 id 进行汇总,统计出每个不同的 id 出现的个数。

select id, count(1) from syscolumns group by id having count(1) > 10;
这条语句以 id 进行汇总,统计出每个不同的 id 出现的个数,但 having 后的条件指定了只显示 count(1) 大于 10 的数据。。


感觉表达能力有限阿。。不知道搂住看明白没有。。。

#4


最基础的东西,还是先看看帮助吧.

#5


刚好我这两天也在看这个 
我只能说说我的理解 你看对你有没有帮助 

1. Group By 语句简介:
Group By语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”。它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。

2. Group By 的使用:
上面已经给出了对Group By语句的理解。基于这个理解和SQL Server 2000的联机帮助,下面对Group By语句的各种典型使用进行依次列举说明。
2.1 Group By [Expressions]:
这个恐怕是Group By语句最常见的用法了,Group By + [分组字段](可以有多个)。在执行了这个操作以后,数据集将根据分组字段的值将一个数据集划分成各个不同的小组。
比如有如下数据集,其中水果名称(FruitName)和出产国家(ProductPlace)为联合主键:

水果名称  产地 单价
FruitName   ProductPlace   Price
Apple    China      $1.1
Apple    Japan      $2.1
Apple    USA        $2.5
Orange   China      $0.8
Banana   China      $3.1
Peach    USA        $3.0

如果要查出 每个国家有多少种水果 那么就是 

select count(*) as 水果种类,ProductPlace as 国家 from 表 group by  ProductPlace


Group By 和 Having, Where ,Order by语句的执行顺序:
最后要说明一下的Group By, Having, Where, Order by几个语句的执行顺序。一个SQL语句往往会产生多个临时视图,那么这些关键字的执行顺序就非常重要了,因为你必须了解这个关键字是在对应视图形成前的字段进行操作还是对形成的临时视图进行操作,这个问题在使用了别名的视图尤其重要。以上列举的关键字是按照如下顺序进行执行的:Where, Group By, Having, Order by。首先where将最原始记录中不满足条件的记录删除(所以应该在where语句中尽量的将不符合条件的记录筛选掉,这样可以减少分组的次数),然后通过Group By关键字后面指定的分组条件将筛选得到的视图进行分组,接着系统根据Having关键字后面指定的筛选条件,将分组视图后不满足条件的记录筛选掉,然后按照Order By语句对视图进行排序,这样最终的结果就产生了。在这四个关键字中,只有在Order By语句中才可以使用最终视图的列名,

#6


如果要查出 水果种类有两种以上的国家和 水果种类 那么就是 

select count(*) as 水果种类数,ProductPlace as 国家 from 表 group by  ProductPlace having  count(*)>2

#7


同意楼上.顶

#8




可参照链接

http://shenliang1985.blog.163.com/blog/static/290838052007101285736707/

#1


ORDER BY 是按什么来排序
,GROUP BY 是按组 来排!就是  BY后面 接什么 就按照 那个来排序!
,HAVING  是统计!

#2


谢谢上楼的回复
能不能举例说明一下
最好把它们都用上那就最好了

#3


ORDER BY 用于对数据按指定的列和方法排序。

select * from syscolumns order by id asc, colorder desc;
指示查询出的结果 按 id 正序排列, colOrder 逆序排列。


GROUP BY 用于汇总统计。 HAVING 用途和 WHERE类似,但用于对 GROUP BY 的结果进行过滤。
select id, count(1) from syscolumns group by id;
这条语句以 id 进行汇总,统计出每个不同的 id 出现的个数。

select id, count(1) from syscolumns group by id having count(1) > 10;
这条语句以 id 进行汇总,统计出每个不同的 id 出现的个数,但 having 后的条件指定了只显示 count(1) 大于 10 的数据。。


感觉表达能力有限阿。。不知道搂住看明白没有。。。

#4


最基础的东西,还是先看看帮助吧.

#5


刚好我这两天也在看这个 
我只能说说我的理解 你看对你有没有帮助 

1. Group By 语句简介:
Group By语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”。它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。

2. Group By 的使用:
上面已经给出了对Group By语句的理解。基于这个理解和SQL Server 2000的联机帮助,下面对Group By语句的各种典型使用进行依次列举说明。
2.1 Group By [Expressions]:
这个恐怕是Group By语句最常见的用法了,Group By + [分组字段](可以有多个)。在执行了这个操作以后,数据集将根据分组字段的值将一个数据集划分成各个不同的小组。
比如有如下数据集,其中水果名称(FruitName)和出产国家(ProductPlace)为联合主键:

水果名称  产地 单价
FruitName   ProductPlace   Price
Apple    China      $1.1
Apple    Japan      $2.1
Apple    USA        $2.5
Orange   China      $0.8
Banana   China      $3.1
Peach    USA        $3.0

如果要查出 每个国家有多少种水果 那么就是 

select count(*) as 水果种类,ProductPlace as 国家 from 表 group by  ProductPlace


Group By 和 Having, Where ,Order by语句的执行顺序:
最后要说明一下的Group By, Having, Where, Order by几个语句的执行顺序。一个SQL语句往往会产生多个临时视图,那么这些关键字的执行顺序就非常重要了,因为你必须了解这个关键字是在对应视图形成前的字段进行操作还是对形成的临时视图进行操作,这个问题在使用了别名的视图尤其重要。以上列举的关键字是按照如下顺序进行执行的:Where, Group By, Having, Order by。首先where将最原始记录中不满足条件的记录删除(所以应该在where语句中尽量的将不符合条件的记录筛选掉,这样可以减少分组的次数),然后通过Group By关键字后面指定的分组条件将筛选得到的视图进行分组,接着系统根据Having关键字后面指定的筛选条件,将分组视图后不满足条件的记录筛选掉,然后按照Order By语句对视图进行排序,这样最终的结果就产生了。在这四个关键字中,只有在Order By语句中才可以使用最终视图的列名,

#6


如果要查出 水果种类有两种以上的国家和 水果种类 那么就是 

select count(*) as 水果种类数,ProductPlace as 国家 from 表 group by  ProductPlace having  count(*)>2

#7


同意楼上.顶

#8




可参照链接

http://shenliang1985.blog.163.com/blog/static/290838052007101285736707/