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对应的总数

流程:

  1. GROUP BY site_id
  2. SUM(count_)
1
2
SELECT site_id, SUM(count_) FROM groupby_
GROUP BY site_id;

如果查询语句带上aid,就会报错,原因就是上面提到的关系型数据库的问题。

3.2 HAVING

在SQL中增加HAVING原因是,WHERE关键字无法与聚合函数一起使用。

例如查询site总数超过200的site_id

1
2
3
4
SELECT s.site_id FROM (
SELECT site_id, SUM(count_) AS num FROM groupby_
GROUP BY site_id
) AS s WHERE num > 200;

使用HAVING就没有这么繁琐啦😀,它能配合聚合函数作为筛选条件

1
2
3
SELECT site_id FROM groupby_
GROUP BY site_id
HAVING SUM(count_) > 200;

3.3 IN

IN允许在WHERE子句中定义多个值

例如查询表中site_id是1、2、4的数据,使用AND连接条件显得很复杂,这里就可以使用IN

1
2
SELECT * FROM groupby_
WHERE site_id IN (1, 2, 4);

注意:这里WHERE后面可以跟多个参数,那么对应地,IN后面就应该跟一个表。力扣刷题需要用到这个思路🐷

4. 处理日期

  • CURDATE() - 返回当前日期
  • DATEDIFF(date1, date2) - 返回两个日期之间的天数(date1 - date2),如果date1要早于date2,则返回一个负数。

5. case when

5.1 简单case语句

1
2
3
4
5
6
CASE case_expression
WHEN value1 THEN commands
WHEN value2 THEN commands
...
ELSE commands
END;

其中case_expression可以是任何有效的表达式,如果case_expression的值和value1、value2…中一个相等,则执行对应commands;如果均不匹配,则执行ELSE中的commands。如果省略ELSE子句,并且找不到匹配项,MySQL会报错。

5.2 可搜索case语句

1
2
3
4
5
6
CASE 
WHEN condition1 THEN commands
WHEN condition2 THEN commands
...
ELSE commands
END;

类似IF,但比IF更加可读。满足condition的条件则执行后面的commands。相比于简单case,可搜索case的条件更加多样,不像简单case只对一个表达式进行条件判断。

6. 参考