1. 聚合函数(Aggregate函数)
聚合函数从列中取得的值,返回一个单一的值。
- AVG() - 返回平均值
- COUNT() - 返回记录个数
- FIRST() - 返回第一个记录的值
- LAST() - 返回最后一个记录的值
- MAX() - 返回最大值
- MIN() - 返回最小值
- SUM() - 返回总和
聚合函数需要输入一系列数据,返回的是一个值!这些函数的使用都比较简单,但要注意有些地方不能使用聚合函数😑
2. 标量函数(Scalar函数)
标量函数取得一个单一的值,返回一个单一的值。
- UCASE() - 将某个字段转换为大写
- LCASE() - 将某个字段转换为小写
- MID() - 从某个文本字段提取字符,MySQL中使用(类似于下面的SubString)
- SubString(字段, 1, end) - 从某个文本字段提取字符
- LEN() - 返回某个字段的长度
- ROUND() - 对某个数值字段的小数位数进行四舍五入
- NOW() - 返回当前系统日期和时间
- FORMAT() - 格式化某个字段的显示方式
3. MySQL中几个关键字的使用
3.1 GROUP BY
GROUP BY用于结合聚合函数,根据一个或多个列对结果集进行分组。
过程理解:
注意:由于MySQL是关系型数据库,不允许单元格有多个值,破坏一一对应的关系,所以这里直接查SELECT * FROM info GROUP BY name是错误的,需要使用聚合函数提取多个值的数据。
这里使用了菜鸟教程使用的表格进行演示:
根据site_id进行分组,查询每个site对应的总数
流程:
- GROUP BY site_id
- SUM(count_)
1 | SELECT site_id, SUM(count_) FROM groupby_ |
如果查询语句带上aid,就会报错,原因就是上面提到的关系型数据库的问题。
3.2 HAVING
在SQL中增加HAVING原因是,WHERE关键字无法与聚合函数一起使用。
例如查询site总数超过200的site_id
1 | SELECT s.site_id FROM ( |
使用HAVING就没有这么繁琐啦😀,它能配合聚合函数作为筛选条件
1 | SELECT site_id FROM groupby_ |
3.3 IN
IN允许在WHERE子句中定义多个值
例如查询表中site_id是1、2、4的数据,使用AND连接条件显得很复杂,这里就可以使用IN
1 | SELECT * FROM groupby_ |
注意:这里WHERE后面可以跟多个参数,那么对应地,IN后面就应该跟一个表。力扣刷题需要用到这个思路🐷
4. 处理日期
- CURDATE() - 返回当前日期
- DATEDIFF(date1, date2) - 返回两个日期之间的天数(date1 - date2),如果date1要早于date2,则返回一个负数。
5. case when
5.1 简单case语句
1 | CASE case_expression |
其中case_expression可以是任何有效的表达式,如果case_expression的值和value1、value2…中一个相等,则执行对应commands;如果均不匹配,则执行ELSE中的commands。如果省略ELSE子句,并且找不到匹配项,MySQL会报错。
5.2 可搜索case语句
1 | CASE |
类似IF,但比IF更加可读。满足condition的条件则执行后面的commands。相比于简单case,可搜索case的条件更加多样,不像简单case只对一个表达式进行条件判断。