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 后面(重要)

 

先看表

 

orderby group by_第1张图片

 

表内容

 

orderby group by_第2张图片

 

 

假如现在让你找出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子句。


orderby group by_第3张图片


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额排序的过程,简单的降序与升序的排序。

 

你可能感兴趣的:(sql)