sql语句中order by、group by和having的区别

组合子句:

order bygroup by、having、where、limit n,m可以组合使用,
在这些子句都出现时,其顺序为:
wheregroup by、having、order by、limit n,m

既where负责选出记录、group by将记录归组、having选出符合条件的记录组、在输出结果前order by按照要求对结果进行排序、limit n,m限制从第n+1行开始输出m行,若要输出第n+1行后的所有记录,可让m=-1
例如:

select city,surname,firstname,count(*) from customer
    where state = "aaa"
    group by surname,firstname
    having count(*)>=2
    order by city
    limit 0 -1;

查询住在“aaa州”的同名客户,结果根据城市名称排序,输出从0开始的所有记录。

order by 子句在查询执行之后对数据进行排序

select surname,firstname from customer
    where city="a1" and firstname ="a2" order by surname;

这段查询语句将查找所有 city 为a1,而firstname 为a2的客户,接着按surname的首字母升序排列查询结果。
也可以对多个字段进行排序

select surname,firstname ,initial from customer
    where city="a1" or city ="a2" order by surname,firstname,initial;

这段查询语句将查找所有 city 为a1或者为a2的客户,排序方式:先按surname的首字母升序,如果surname相同,在按照firstname排序,如果都相同,在按照initial排列查询结果。
默认情况,order by 子句按照升序排序(ASC);若需逆向,可使用DESC

select surname,firstname from customer
    where city="a1" and firstname ="a2" order by surname DESC;

group by对查询数据归组

与order by 不同,该子句是在查询过程中对数据进行排序,目的是为了归组(group)或聚合(aggregation),利用排序来集合信息,是发现最大值、最小值、平均值、记录数量的最简单方式。

select city,count(*) from customer group by city;

这句查询首先按city字段排序customer表的记录,将值相同的记录放在一起。查询的输出结果工两列。第一列按照字母顺序列出诚实名称,第二列count字列出每个城市里各居住了几位客户。输出的行数等于表customer里各个不同的city值的数量,count(*)计算每个组内的记录条数。

group by 也能从聚合的记录中找出不同的属性

select city,min(birth_date) from customer group by city;

该查询先按照city分出组,在显示各个城市中最年长的客户
注:group by 子句只能用于查找组记录特征,但不能查找某条记录的详细信息。
可在group by 子句中使用的函数

AVG()   找出一组数值字段的平均值
MIN()   找出一组数值字段的最小值
MAX()   找出一组数值字段的最大值
SUM()   找出一组数值字段的总和
COUNT() 找出一组数值字段的记录数量

having 子句允许有条件地聚合数据为数组

select city,count(*),min(birth-date)from customer
    group by city having count(*)>10;

这段查询首先按照city值归组记录,在删选留下拥有10名以上客户的组,在查出年龄最大者。列出的信息则是城市名称、客户数量、及最年长者客户的生日。

having 子句包含的字段或者表达式必须来自select子句。
having子句只能与group by 子句一同使用,这两个子句的查询数度比较慢,最好不要用来替代where子句
例如:

select cust_id,surname from customer having surname ="a1";

可改为:

select cust_id,surname from customer where surname ="a1";
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值