orderby group by

 

说到SQL语句,大家最開始想到的就是他的查询语句:

select* from tableName;

这是最简单的一种查询方式,不带有不论什么的条件。

当然在我们的实际应用中,这条语句也是非经常常使用到的,当然也是最简单的。在考虑到性能的时候,我们一般不这么

写!详细怎么写,请关注兴许的文章。。。

以下我们着重的看下文章标题所提到的几个子句。

一、Where


例如以下一句:

select * from  dbo.CommodityElectric where Code='e4'

就是寻找表CommodityElectric中, Code='e4'的记录。

这里的where对查询的结果进行了筛选。仅仅有满足where子句中条件的记录才会被查询出来。

 

二、Group By

 

GROUP BY 是分组查询一般 GROUP BY 是和聚合函数配合使 

group by 有一个原则,就是 select 后面的全部列中,没有使用聚合函数的列,必须出如今 group by 后面(重要)

 

先看表

 


 

表内容

 


 

 

假如如今让你找出CommodityName的平均价格,你怎么办?

我们能够这么做:


select avg(CommodityName) from tablename where CommodityName="联想";

Group By通常是和一些聚合函数一起使用,比方上面我们用到的求平均的函数avg,还有求和sum,求个数count

求最大max,求最小minmax对于上表,


求每种商品的最大的价格:

selectCommodityName,CommodityPrice,CommodityType,max(CommodityType) from tablename group by CommodityName


GroupBy另一个重要的合作对象,他就是having

 

.having


我们用Group By进行分组后,怎样对分组后的结果进行一个筛选呢?having来帮您解决这个难题。

通常,你须要通过在HAVING子句中反复聚合函数表达式来引用聚合值,就如你在


SELECT语句中做的那样。例


SELECT A COUNT(B) FROM TABLE GROUP BY A HAVING COUNT(B)>2


1.首先看一个样例:求平均价格在3000以上的商品

假设我们使用这个:

 

select   CommodityName , avg(CommodityPrice) from  dbo.Commodity where avg(CommodityPrice)>3000  group by CommodityName 

这样是否能达到我们的要求呢?

 

答案是否定的,由于where子句不能使用聚合函数。为了解决问题,我们来用下我们的杀手锏,他就是Having


改写例如以下:

select   CommodityName    ,  avg(CommodityPrice)   from  dbo.Commodity   group by CommodityName    having avg(CommodityPrice)>3000;


2.我们继续看Having的另外一个匪夷所思


运算符in也能够用在having子句。




selectfruitname,avg(price) from tablename group by fruitname having fruitname in("orange","apple");


四、Order By

OrderBy是对查询的结果进行一个再排序的过程,一般放在查询语句的最后,能够是单列,也能够实现多列的排序。

分为升序asc和降序desc,默认的为升序。

OrderBy单列的排序比較简单,多列的也不麻烦。

select * fromtablename  group by friutname order by fruitname asc,price desc.


小结:

之所以写这个简短的博客,是在项目中常常要用到这两个的语句,并且刚開始自己理解也是马马虎虎的,不是非常求全。现在在项目中应该彻底的了解了。所以加以全面的了解。Gorderby是通常与聚合的函数进行结合使用,后可跟having进行筛选。Order by是一个i额排序的过程,简单的降序与升序的排序。

 

posted @ 2014-06-06 09:22  mengfanrong  阅读(317)  评论(0编辑  收藏  举报