sql 排序_SQL聚合与排序

点击 5025a7fe482e26558c674a8a653f99f2.png不爱吃饭爱学习 关注我4f3f8f2185211c3dcfcd8ffbfb5c9aa2.png

“莫向外求。a0b414f93415b0694530da16690cfdba.png

a0b414f93415b0694530da16690cfdba.png今日学习 

(以下操作都是在pgAdmin完成)

一、对表进行聚合查询

什么是分组函数(聚合函数):

分组函数作用于一组数据,并对一组数据返回一个值。聚合函数和分组函数都是描述的同一个概念,就是多行查询结果 聚合计算成一个结果返回.

记住5个常用的聚合函数:

COUNT:计算表中的记录数(行数)

SUM:计算表中数值列中数据的合计值

AVG:计算表中数值列中数据的平均值

MAX:求出表中任意列中数据的最大值

MIN:求出表中任意列中数据的最小值

1.COUNT:计算表中的记录数(行数)

COUNT函数的结果根据参数的不同而不同。COUNT(*)会得到包含NULL的数据行数,而COUNT()会得到非NULL的数据行数。

10714d887fdb48d44f72c52c176a365b.png

31c057b6c8a1a62137b4e56ebb382d80.png

e80d1bd4d5638fabaa52d6bc9570474a.png

2.SUM:计算表中数值列中数据的合计值

聚合函数会将NULL排除在外再计算。但COUNT(*)例外,并不会排除NULL。

ffe1dbef3a2391e9fc315c09249c8e6a.png

3.AVG:计算表中数值列中数据的平均值

6a481ab99f05992d0dbc508891ade158.png

4.MAX、MIN计算最大值、最小值

MAX/MIN函数几乎适用于所有数据类型的列。SUM/AVG函数只适用于数值类型的列。

0c006672d2d09d2167b74b345b1af297.png

对日期计算最大值最小值

30e69c9e072b06144fa6165a2957985f.png

5.使用聚合函数删除重复值(distinct)

在聚合函数的参数中使用DISTINCT,可以删除重复数据。

7282fd8122b9eef52f4dd0ca844cc082.png

所有的聚合函数都可以使用distinct

3be334ec465cc9fe1249f2f36a46a57b.png

二、对表进行分组

GROUP BY子句就像切蛋糕那样将表进行了分组。在GROUP BY子句中指定的列称为聚合键或者分组列。由于能够决定表的切分方式,所以是非常重要的列。当然,GROUP BY子句也和SELECT子句一样,可以通过逗号分隔指定多列。

使用聚合函数和GROUP BY子句时需要注意以下4点:

① 只能写在SELECT子句之中

② GROUP BY子句中不能使用SELECT子句中列的别名

③ GROUP BY子句的聚合结果是无序的

④ WHERE子句中不能使用聚合函数

注意书写顺序:

1.SELECT→2. FROM→3. WHERE→4. GROUP BY

8f8609eadfebc393fa685c2430277607.png

1.聚合键中包含NULL

聚合键中包含NULL时,在结果中会以“不确定”行(空行)的形式表现出来。

45122812f43bfad275e42b0ca3aff135.png

2.同时使用where子句和group by子句

先根据WHERE子句指定的条件进行过滤,然后再进行汇总处理

c81ffea396eb7ddd3ef081c33f8e9975.png

GROUP BY和WHERE并用时SELECT语句的执行顺序:

FROM→WHERE→GROUP BY→SELECT

3.使用聚合函数和Group By的常见错误

错误一: 把聚合键之外的列名书写在SELECT子句之中

8736460b527faea5d2f17a119db64cb3.png

使用聚合函数时,SELECT子句中只能存在以下三种元素:

● 常数

● 聚合函数

● GROUP BY子句中指定的列名(也就是聚合键)

错误二:在Group BY子句中写了列的别名

注意: 在GROUP BY子句中不能使用SELECT子句中定义的别名。

错误三:Group BY子句有排序

注意:GROUP BY子句结果的显示是无序的。(每次执行结果排序都是随机的)

错误四:在Where子句中使用聚合函数

只有SELECT子句和HAVING子句(以及ORDER BY子句)中能够使用聚合函数。

9f6a373460df77eb03e6ff9dbf169b89.png

4.Distinct和Group By:

在“想要删除选择结果中的重复记录”时使用DISTINCT,在“想要计算汇总结果”时使用聚合函数加GROUP BY。

三、为聚合结果指定条件

1.Having子句

书写顺序:

1.SELECT→2. FROM→3. WHERE→4. GROUP BY→5.HAVING

83c67d1ffbe6638ac186d6b72bff19c9.png

d9c630cb18ef3ff91b939e8855bce003.png

HAVING子句中能够使用的3种要素如下所示:

● 常数

● 聚合函数

● GROUP BY子句中指定的列名(即聚合键)更适合写在Where子句

注意:

WHERE子句=指定行所对应的条件

HAVING子句=指定组所对应的条件

1.聚合键所对应的条件不应该书写在HAVING子句当中,而应该书写在WHERE子句当中。

2.将条件写在WHERE子句中要比写在HAVING子句中的处理速度更快,返回结果所需的时间更短。

四、对查询结果进行排序

1.Order BY 子句默认升序

ORDER BY子句都需要写在SELECT语句的末尾。这是因为对数据行进行排序的操作必须在结果即将返回时执行。ORDER BY子句中书写的列名称为排序键。

书写顺序

1.SELECT→2. FROM→3. WHERE→4. GROUP BY→5.HAVING→6. ORDER BY

6850c3d64577012103920dad33c166da.png

降序写法:

列名后面使用 DESC

066365fccf492a450b0a93eb978a0374.png

2.指定多个排序键

规则是优先使用左侧的键,如果该列存在相同值的话,再接着参考右侧的键。当然,也可以同时使用3个以上的排序键。

ASC 升序

DESC 降序

6e2ee946c440da4630e624c36b6539a7.png

8881100d8f067d760ff0c3f10adfe344.png

3.ORDER BY子句中可以使用SELECT子句中定义的别名。

SQL语句执行顺序:

FROM→WHERE→GROUP BY→HAVING→SELECT→ORDER BY

4.ORDER BY子句中可以使用的列

在ORDER BY子句中可以使用SELECT子句中未使用的列和聚合函数。但是GROUP BY中未使用的列,其不能使用,还是要在GROUP  BY的约束下。

4aa4daec62c0be3a19ed1b1dd85efd80.png

点个【分享、在看与点赞】

万丈高楼平地起

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值