where
与 having
是 MySQL 中常见的查询条件使用的关键词, group by
是用于对查询数据进行二次操作的“聚合函数”
一、where
与 having
WHERE
是一个约束声明,使用 where 来约束来自数据库的数据,where 子句的生效是在查询结果返回之前起,其作用范围是连接的数据库中的数据,且 where 子句中不能使用聚合函数。
HAVING
是一个过滤声明,使用 having 用来对查询结果进行的过滤操作, having 子句生效是在查询结果返回之后,作用范围是其他部分查询生效后返回的查询结果,此外在 having 子句中也可以使用聚合函数。
二、聚合函数: group by
GROUP BY
在 SQL 语法中的作用有点类似用 shell 中的 unique
命令, group by 可以将指定的数据列中的数据按照唯一确定的值来分组“聚合”,注意实现特定的查询操作,再次使用 w3school 中的示例,对于如下的数据表 Orders:
O_Id | OderDate | OrderPrice | Customer |
---|---|---|---|
1 | 2008/12/29 | 1000 | Bush |
2 | 2008/11/23 | 1600 | Carter |
3 | 2008/10/05 | 700 | Bush |
4 | 2008/09/28 | 300 | Bush |
5 | 2008/08/06 | 2000 | Adams |
6 | 2008/07/21 | 100 | Carter |
假设希望查找每个客户的总金额(总订单),可以使用查询语句:
SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer;
SUM()
函数可以对指定列中的数据进行求和操作,本次查询的结果:
Customer | SUM(OrderPrice) |
---|---|
Adams | 2000 |
Bush | 2000 |
Carter | 1700 |
最终通过 GROUP BY 子句实现了按照不同的用户“分组”查询各自总订单金额的目的。