order by 从英文里理解就是行的排序方式,默认的为升序。 order by 后面必须列出排序的字段名,可以是多个字段名。
group by 从英文里理解就是分组。必须有“聚合函数”来配合才能使用,使用时至少需要一个分组标志字段。
我在数据库课程设计做了一个管理楼市的数据库,其中的两个表(交易信息表)和(客户信息表)
交易信息表 客户信息表
要求的检索信息是:管理员查询所有客户的信息及是否存在房屋交易行为
刚开始的SQL语句为:
select client_info.Client_Name,Address,identity_card,TradeForm,Time_limit
from client_info left join trade_info on
trade_info.Client_Name=client_info.Client_Name
group by TradeForm
但检索到的信息是这样的:
只检索道三条信息,根据TradeForm排序,因为left join的原因Client_Name的顺序和左边的表trade_info一致。可以得到案例中group by的操作过程大致如下:
1.根据on 后面的联合条件对两表进行left join操作
2.将拥有相同TradeForm的行分到一组
3.找到各个组内的第一个满足的行返回
将group by和having语句结合的例子较多,having 提供了对 group检索的能力,返回的自然是满足having条件的组,而不是单个组内的行。
having主要通过聚合表达式筛选满足条件的组,对象是数字类型的数据。
求平均值 | |
COUNT({*|[distinct] } expr) | 统计行的数量 |
MAX([distinct] expr) | 求最大值 |
MIN([distinct] expr) | 求最小值 |
SUM([distinct] expr) | 求累加和 |
回到上面的例子,需要正确检索到信息只需要将group by 改成order by即可