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语句中才可以使用最终视图的列名
				
时间: 2024-10-01 02:47:06

group by having where order by的相关文章

MySQL查询子句(group by,limit,union,order by等)

Order by 按照字段值进行排序,默认升序(asc).校对规则决定排序关系. order by 字段 升序|降序(asc|desc), Order by允许多字段排序. 指的是,先按第一个字段排序,如果不能区分,才使用第二个字段,以此类推. create table test( id int primary key not null auto_increment, name varchar(10), group_id int ); insert into test values(null,'

jdk8 stream实现sql单表select a,b,sum(),avg(),max() from group by a,b order by a,b limit M offset N及其性能

之所以要测该场景,是因为merge多数据源结果的时候,有时候只是单个子查询结果了,而此时采用sql数据库处理并不一定能够合理(网络延迟太大). 测试数据10万行,结果1000行 limit 20 offset 0的延时如下: package com.hundsun.ta.base.service; import com.hundsun.ta.utils.JsonUtils; import lombok.AllArgsConstructor; import lombok.NoArgsConstru

mysql “group by ”与&quot;order by&quot;的研究--分类中最新的内容

这两天让一个数据查询难了.主要是对group by 理解的不够深入.才出现这样的情况这种需求,我想很多人都遇到过.下面是我模拟我的内容表我现在需要取出每个分类中最新的内容 select * from test group by category_id order by `date` 结果如下明显.这不是我想要的数据,原因是msyql已经的执行顺序是 引用 写的顺序:select ... from... where.... group by... having... order by..执行顺序:

分组统计:count,group by,having, order by

--统计男女生的总人数select COUNT(*) from Student where Sex='男'select COUNT(*) from Student where Sex='女'--统计每一个班级的总人数select COUNT(*) from Student where ClassId=1--分组统计:需要按班级分组,每一个组得到一个统计结果--select 字段列表 from 表列表 where 数据源筛选 group by 分组字段列表 order by 排序字段列表selec

mysql中group by和order by混用 结果不是理想结果

在使用mysql排序的时候会想到按照降序分组来获得一组数据,而使用order by往往得到的不是理想中的结果,那么怎么才能使用group by 和order by得到理想中的数据结果呢? 例如 有一个 帖子的回复表,posts( id , tid , subject , message ,  dateline ) , id为 自动增长字段, tid为该回复的主题帖子的id(外键关联),  subject 为回复标题, message 为回复内容, dateline 为回复时间,用UNIX 时间戳

select from where group by having order by执行规则

执行顺序依次是from — where — group by — having — select — order by 其中select 和 from 是必选项 from 后面的表自右向左解析,所以数据量小的表放在最右边进行关联(用小表关联大表) where 条件后面的条件自上向下解析(把能筛选出小量数据的条件放在最左边)

group by;having;order by

1.order by 1,2,3  和  order by 3,2,1  的结果不同 2.having 不能使用别名 ;order by 中可以使用别名 在oracle中的执行顺序: select_list >  where > group by > having() > alias > order by 3.group_by_list 可以不出现在select_list 4.select_list 如果不出现在 group_functon中,就必须出现在 group_by_

Group By和Order By的总结

1.Group By 语句中:select指定的字段必须是“分组依据字段”,其他字段若想出现在select中则必须包含在聚合函数中. 例如: select [col1], avg([col2])   from [tb] group by [col1]; 2.Order By和Group By 一起使用时需要注意:  ORDER BY 子句中的列必须包含在聚合函数或 GROUP BY 子句中. 例如: SELECT [col1] ,[col2],MAX([col3]) FROM [tb] GROU

sql语句select group by order by where一般先后顺序

写的顺序:select ... from... where.... group by... having... order by..执行顺序:from... where...group by... having.... select ... order by... Mysql 全值匹配我最爱,最左前缀要遵守: 带头大哥不能死,中间兄弟不能断: 索引列上少计算,范围之后全失效: LIKE百分写最右,覆盖索引不写星: 不等空值还有or,索引失效要少用. 原文地址:https://www.cnblog