group by having where order by

Posted 可爱的呆子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了group by having where order by相关的知识,希望对你有一定的参考价值。

1group by

*在返回集字段中,这些字段要么就要包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数中。

 

select 类别, sum(数量) as 数量之和
from A
group by 类别



select 类别, sum(数量) AS 数量之和 from A group by 类别 order by sum(数量) desc


select 类别, 摘要, sum(数量) AS 数量之和
from A
group by 类别, 摘要

group by all

首先我们不使用带ALL关键字的Group By语句:

SELECTCOUNT(*)AS水果种类,ProductPlaceAS出产国
FROMT_TEST_FRUITINFO
WHERE(ProductPlace<>‘Japan‘)
GROUPBYProductPlace

那么在最后结果中由于Japan不符合where语句,所以分组结果中将不会出现Japan

现在我们加入ALL关键字:

SELECTCOUNT(*)AS水果种类,ProductPlaceAS出产国
FROMT_TEST_FRUITINFO
WHERE(ProductPlace<>‘Japan‘)
GROUPBYALLProductPlace

重新运行后,我们可以看到Japan的分组,但是对应的水果种类不会进行真正的统计,聚合函数会根据返回值的类型用默认值0或者NULL来代替聚合函数的返回值

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







 

以上是关于group by having where order by的主要内容,如果未能解决你的问题,请参考以下文章

SQL中where和group by可以连用吗?having算是对检索条件的补充吗?

SQL中where和group by可以连用吗?having算是对检索条件的补充吗?

关于C#中group by如何实现多条件分组汇总

having和group by的区别?

数据库中,select where group by having 执行顺序

group by having where order by